WEB开发网
开发学院软件开发C语言 Effective C# 原则19:选择定义和实现接口而不是继... 阅读

Effective C# 原则19:选择定义和实现接口而不是继承

 2009-02-19 08:16:41 来源:WEB开发网   
核心提示: 前面的代码创建了一个整型的数组链表,而且使用IList接口指针添加了两个不同的值到集合中,Effective C# 原则19:选择定义和实现接口而不是继承(3),通过重载OnInsert()方法,IntList类在添加类型时会检测类型,例如,很多应用程序使用DataSet与你的应用程序进行

前面的代码创建了一个整型的数组链表,而且使用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与你的应用程序进行数据交换。假设这一交流方法是不变的,那这太容易实现了:

上一页  1 2 3 4 5  下一页

Tags:Effective 原则 选择

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