EffectiveC#01--避免返回内部类对象的引用

此篇是对00中第3点的再一次阐述。

1.如果一个属性返回一个引用类型,那么调用者就可以访问这个对象的公共成员,也包括修改这些属性的状态。

public class MyBusinessObject 
{ // Read Only property providing access to a  private data member: 
private DataSet _ds; 
public DataSet Data { get { return _ds; } }
} // Access the dataset: DataSet ds = bizObj.Data; // Not intended, but allowed: ds.Tables.Clear( );

 2.很显然你想防止这样的事情发生,你有四个策略来保护你的内部数据结构不被无意的修改:值类型,恒定类型,接口和包装(模式)

   值类型在通过属性访问时,是数据的拷贝。

   恒定类型如System.String。你可以返回一个字符串或者其它恒定类型。

   System.Dataset类使用了接口IListsource同时也使用了包装对象--DataViewManager类提供了一种访问DataSet的方法。

3.通过暴露接口来限制一些内部私有数据访问,或者包装对象。

  你希望你的客户可以修改你的内部数据时,应该实现你自己的观察者模式,这样对象可以验证修改或者响应它们。

原文地址:https://www.cnblogs.com/tiantianle/p/4931675.html