在 C# 中定义一个真正只读的 List_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 在 C# 中定义一个真正只读的 List

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

 2014/8/15 15:34:41  backslash112  程序员俱乐部  我要评论(0)
  • 摘要:C#中的readonly关键字表示类中的字段只允许在定义时候或者构造方法中初始化。普通类型的数据完全可以达到预期的效果,但是在对象或者列表中,要想达到只读的效果,只用一个readonly关键字是不可以的。当你把一个List用readonly修饰,在其他类中仍然可以使用Add,Remove方法来改变它。但是可能你想要的只读属性是:只有在当前类中修改这个列表的item,才不想被其他类做任何修改!下面这个示例就是用readonly关键字修饰的一个List,它的内容项目仍然可以在其他类中添加或删除
  • 标签:C# list 一个 真正

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

下面这个示例就是用 readonly 关键字修饰的一个 List,它的内容项目仍然可以在其他类中添加或删除:


就算封装成只读属性,仍然可以在其他类中操作:


不过你可以将属性的类型改为 IEnumerable<T> ,这样就可以达到想要的效果。因为 IEnumerable<T> 类没有 Add, Remove 方法,List<T> 类继承 IEnumerable<T> 类,在 List<T> 类中新增的 Add, Remove 等方法:


如果你想创建一个完全只读的属性,就算在当前类中都不可以修改它的 item,你可以使用 ReadOnlyCollection<T> :


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

发表评论
用户名: 匿名