Effective C# 学习笔记(二十六)防止返回类内部的对象引用
2011-07-15 20:02 小郝(Kaibo Hao) 阅读(425) 评论(0) 编辑 收藏 举报有些时候,你不希望你的类型的属性因为外部引用而更改状态,对外只保持只读或有限的更改权限,这时有四种方法可以防止类内部对象被外部对象引用而引起更改。
- 值类型
- 不可变类型
- 接口
- 对象封装
前两种只需选择正确的类型就好了,后面两种要写些代码来保证属性的访问权限。
使用接口实现:
记住一点,对于外界暴露类内部的属性值,要以接口的形式来暴露访问权限,而不要直接以类的形式来暴露。
例如对于拥有BindingList<T>属性的类,对外只暴露IBindingList接口的非范型属性,或者暴露ICollection<T>的范型属性。代码如下:
public class MyBusinessObject
{
// Read Only property providing access to a
// private data member:
private BindingList<ImportantData> listOfData = new BindingList<ImportantData>();
public IBindingList BindingData
{
get { return listOfData; }
}
public ICollection<ImportantData> CollectionOfData
{
get { return listOfData; }
}
// other details elided
}
使用接口和对象包装来实现只读属性的访问权限控制。代码如下:
public class MyBusinessObject
{
// Read Only property providing access to a
// private data member:
private BindingList<ImportantData> listOfData = new
BindingList<ImportantData>();
public IBindingList BindingData
{
get { return listOfData; }
}
public ReadOnlyCollection<ImportantData> CollectionOfData
{
get
{
return new ReadOnlyCollection<ImportantData>(listOfData);
}
}
// other details elided
}
在实现上,可以使用权限标记属性来进一步控制某一属性的访问权限。
举例来说,对于UI Control来说,其就是用 AddEdit,AllowNew,AlllowRemove等类的属性来控制外界对象对类内部的属性值的修改权限。
出处:http://www.cnblogs.com/haokaibo/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。