Effective C# 原则19:选择定义和实现接口而不是继承
2009-02-19 08:16:41 来源:WEB开发网public DataSet TheCollection
{
get { return _dataSetCollection; }
}
然而这让你在将来很容易遇到问题。某些情况下,你可能从使用DataSet改为暴露一个DataTable,或者是使用DataView,甚至是使用你自己定义的对象。任何的改变都会破坏这些代码。当然,你可能会改变参数类型,但这会改变你的类的公共接口。修改一个类的公共接口意味着你要在一个大的系统中修改更多的内容;你须要修改所有访问这个公共接口的地方。
紧接着的第二个问题麻烦问题就是:DataSet类提供了许多方法来修改它所包含的数据。类的用户可能会删除表,修改列,甚至是取代DataSet中的所有对象。几乎可以肯定这不是你想要的。幸运的是,你可以对用户限制类的使用功能。不返回一个DataSet的引用,你就须要返回一个期望用户使用的接口。DataSet支持IListSource接口,它用于数据绑定:
using System.ComponentModel;
public IListSource TheCollection
{
get { return _dataSetCollection as IListSource; }
}
IListSource让用户通过GetList()方法来访问内容,它同时还有ContainsListCollection属性,因此用户可以修改全部的集合结构。使用IListSource接口,在DataSet里的个别对象可以被访问,但DataSet的所有结构不能被修改。同样,调用者不能使用DataSet的方法来修改可用的行为,从而在数据上移动约束或者添加功能。
当你的类型以类的方式暴露一些属性时,它就暴露了这个类的全部接口。使用接口,你可以选择只暴露一部分你想提供给用户使用的方法和属性。以前在类上实现接口的详细内容,在后来是可以修改的(参见原则23)。
另外,不相关的类型可以实现同样的接口。假设你在创建一个应用程序。用于管理雇员,客户和卖主。他们都不相关,至少不存在继承关系。但他们却共享着某些功能。他们都有名字,而且很有可能要在一些Windows控件中显示他们的名字:
- ››选择好的广告联盟:选择广告联盟理解掌握的六大绝招...
- ››选择谁? 揭秘90后必备的音乐播放器
- ››选择性关闭Win 7视频预览 节约系统资源
- ››选择适合的SRAM存储器的技巧
- ››Effective C# 原则40:根据需求选择集合
- ››Effective C# 原则41:选择DataSet而不是自定义的...
- ››Effective C# 原则42:使用特性进行简单的反射
- ››Effective C# 原则43:请勿滥用反射
- ››Effective C# 原则44:创建应用程序特定的异常类
- ››Effective C# 第6章:杂项
- ››Effective C# 原则45:选择强异常来保护程序
- ››Effective C# 原则47:选择安全的代码
更多精彩
赞助商链接