码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-08-15 14:20:08      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:blog   http   使用   io   strong   数据   2014   cti   

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

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


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


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


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


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

bubuko.com,布布扣

在 C# 中定义一个真正只读的 List,布布扣,bubuko.com

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

标签:blog   http   使用   io   strong   数据   2014   cti   

原文地址:http://www.cnblogs.com/sirkevin/p/3914606.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!