在 C# 中定义一个真正只读的 List

C# 中的 readonly 关键字表示类中的字段只允许在定义时候或者构造方法中初始化。普通类型的数据完全可以达到预期的效果,但是在对象或者列表中,要想达到只读的效果,只用一个 readonly 关键字是不可以的。当你把一个 List 用 readonly 修饰,在其他类中仍然可以使用 Add,Remove 方法来改变它。但是可能你想要的只读属性是:只有在当前类中修改这个列表的 item,才不想被其他类做任何修改!

下面这个示例就是用 readonly 关键字修饰的一个 List,它的内容项目仍然可以在其他类中添加或删除:
在 C# 中定义一个真正只读的 List_第1张图片


就算封装成只读属性,仍然可以在其他类中操作:
在 C# 中定义一个真正只读的 List_第2张图片


不过你可以将属性的类型改为 IEnumerable ,这样就可以达到想要的效果。因为 IEnumerable 类没有 Add, Remove 方法,List 类继承 IEnumerable 类,在 List 类中新增的 Add, Remove 等方法:
在 C# 中定义一个真正只读的 List_第3张图片


如果你想创建一个完全只读的属性,就算在当前类中都不可以修改它的 item,你可以使用 ReadOnlyCollection :
在 C# 中定义一个真正只读的 List_第4张图片


在 .NET 4.5 中,List 继承了 IReadOnlyList 和 IReadOnlyCollection,给了我们一种更简单的写法,同样可以达到上述效果:

在 C# 中定义一个真正只读的 List_第5张图片

你可能感兴趣的:(在 C# 中定义一个真正只读的 List)