Effective C# 原则19:选择定义和实现接口而不是继承
2009-02-19 08:16:41 来源:WEB开发网前面的代码创建了一个整型的数组链表,而且使用IList接口指针添加了两个不同的值到集合中。通过重载OnInsert()方法,IntList类在添加类型时会检测类型,如果不是一个整数时,会抛出一个异常。 基类给你实现了默认的方法,而且给我们提供了机会在我们自己的类中实现详细的行为。
CollectionBase这个基类提供的一些实现可以直接在你的类中使用。你几乎不用写太多的代码,因为你可以利用它提供的公共实现。但IntList的公共API是通过CollectionBase实现接口而来的:IEnumerable,ICollection和IList接口。CollectionBase实现了你可以直接使用的接口。
现在我们来讨论用接口来做参数和返回值。一个接口可以被任意多个不相关的类型实现。比起在基类中编码,实现接口的编码可以在开发人员中提供更强的伸缩性。因为.Net环境中强制使用单继承的,这使得实现接口这一方法显得很重要。
下面两个方法完成了同样的任务:
public void PrintCollection( IEnumerable collection )
{
foreach( object o in collection )
Console.WriteLine( "Collection contains {0}",
o.ToString( ) );
}
public void PrintCollection( CollectionBase collection )
{
foreach( object o in collection )
Console.WriteLine( "Collection contains {0}",
o.ToString( ) );
}
第二个方法的重用性远不及第一个。Array,ArrayList,DataTable,HashTable,ImageList或者很多其它的集合类无法使用第二个方法。让方法的参数使用接口,可以让程序具有通用性,而且更容易重用。
用接口为类定义API函数同样可以取得很好的伸缩性。例如,很多应用程序使用DataSet与你的应用程序进行数据交换。假设这一交流方法是不变的,那这太容易实现了:
- ››选择好的广告联盟:选择广告联盟理解掌握的六大绝招...
- ››选择谁? 揭秘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:选择安全的代码
更多精彩
赞助商链接