C# 中的 readonly 关键字表示类中的字段只容许在定义时候或者构造方法中初始化。普通类型的数据彻底能够达到预期的效果,可是在对象或者列表中,要想达到只读的效果,只用一个 readonly 关键字是不能够的。当你把一个 List 用 readonly 修饰,在其余类中仍然能够使用 Add,Remove 方法来改变它。可是可能你想要的只读属性是:只有在当前类中修改这个列表的 item,才不想被其余类作任何修改!
下面这个示例就是用 readonly 关键字修饰的一个 List,它的内容项目仍然能够在其余类中添加或删除:对象
就算封装成只读属性,仍然能够在其余类中操做:blog
不过你能够将属性的类型改成 IEnumerable<T> ,这样就能够达到想要的效果。由于 IEnumerable<T> 类没有 Add, Remove 方法,List<T> 类继承 IEnumerable<T> 类,在 List<T> 类中新增的 Add, Remove 等方法:继承
若是你想建立一个彻底只读的属性,就算在当前类中都不能够修改它的 item,你能够使用 ReadOnlyCollection<T> :it
在 .NET 4.5 中,List<T> 继承了 IReadOnlyList<T> 和 IReadOnlyCollection<T>,给了咱们一种更简单的写法,一样能够达到上述效果:io