WEB开发网
开发学院软件开发C语言 Effective C# 原则23:避免返回内部类对象的引用 阅读

Effective C# 原则23:避免返回内部类对象的引用

 2009-02-19 08:16:30 来源:WEB开发网   
核心提示: 恒定类型,例如System.String,Effective C# 原则23:避免返回内部类对象的引用(2),也是安全的,你可以返回一个字符串,读者可以自行参考原文:But programmers who go to that much work to create bugs get wh

恒定类型,例如System.String,也是安全的。你可以返回一个字符串,或者其它恒定类型。恒定类型的安全性告诉你,没有客户可以修改字符串。你的内部状态是安全的。

第三个选择就是定义接口,从而充许客户访问内部成员的部份功能(参见原则19)。当你创建一个自己的类时,你可以创建一些设置接口,用来支持对类的子对象进行设置。通过这些接口来暴露一些功能函数,你可以尽可能的减少一些对数据的无意修改。客户可以通过你提供的接口访问类的内部对象,而这个接口并不包含这个类的全部的功能。在DataSet上暴露一个IListsource接口就是这种策略,可以阻止一些有想法的程序员来猜测实现这个接口的对象,以及强制转换。这样做和程序员付出更多的工作以及发现更多的BUG都是自找的(译注:这一句理解可能完全不对,读者可以自行参考原文:But programmers who go to that much work to create bugs get what they deserve.)。

System.Dataset类同时也使用了最后一种策略:包装对象。DataViewManager类提供了一种访问DataSet的方法,而且防止变向的方法来访问DataSeto类:

public class MyBusinessObject
{
 // Read Only property providing access to a
 // private data member:
 private DataSet _ds;
 public DataView this[ string tableName ]
 {
  get
  {
   return _ds.DefaultViewManager.
    CreateDataView( _ds.Tables[ tableName ] );
  }
 }
}
// Access the dataset:
DataView list = bizObj[ "customers" ];
foreach ( DataRowView r in list )
 Console.WriteLine( r[ "name" ] );

Tags:Effective 原则 避免

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接