当前位置:主页   - 电脑 - 程序设计 - C#
Effective C# 原则19:选择定义和实现接口而不是继承
来源:网络   作者:   更新时间:2012-03-20
收藏此页】    【字号    】    【打印】    【关闭

  抽象类在类的继承中提供了一个常规的“祖先”。一个接口描述了一个可以被其它类型实现的原子级泛型功能。各有千秋,却也不尽相同。接口是一种合约式设计:一个类型实现了某个接口的类型,就必须实现某些期望的方法。抽象类则是为一个相关类的集合提供常规的抽象方法。这些都是老套的东西了:它是这样的,继承就是说它是某物(is a,),而接口就是说它有某个功能(behaves like.)! 这些陈词滥调已经说了好久了,因为它们提供了说明,同时在两个结构上描述它们的不同:基类是描述对象是什么,接口描述对象有某种行为。

  接口描述了一组功能集合,或者是一个合约。你可以在接口里创建任何的占位元素(placeholder,译注:就是指先定义,后面再实现的一些内容):方法,属性,索引器以及事件。任何实现类型这个接口的类型必须为接口里的每个元素提供具体的内容。你必须实现所有的方法,提供全部属性访问器,索引器,以及定义接口里的所有事件。你在接口里标记并且构造了可重用的行为。你可以把接口当成参数或者返回值,你也可以有更多的机会重用代码,因为不同的类型可以实现相同的接口。更多的是,比起从你创建的基类派生,开发人员可以更容易的实现接口。(译注:不见得!)

  你不能在接口里提供任何成员的具体实现,无论是什么,接口里面都不能实现。并且接口也不能包含任何具体的数据成员。你是在定义一个合约,所有实现接口的类型都应该实现的合约。

  抽象的基类可以为派生类提供一些具体的实现,另外也描述了一些公共的行为。你可以更详细的说明数据成员,具体方法,实现虚函数,属性,事件以及索引器。一个基类可以只提供部份方法的实现,从而只提供一些公共的可重用的具体实现。抽象类的元素可以是虚的,抽象的,或者是非虚的。一个抽象类可以为具体的行为提供一个可行的实现,而接口则不行。

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明