- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
抽象类和口的区别
VC#--抽象类和借口的区别——(2)2008-01-04 22:24? 面向对象思想:多态???????????????????? ?? ? 接口????????????????????????????? ? 抽象类1. 引言在我之前的一篇post《抽象类和接口的谁是谁非》中,和同事管伟的讨论,得到很多朋友的关注,因为是不成体系的论道,所以给大家了解造成不便,同时关于这个主题的系统性理论,我认为也有必要做以总结,因此才有了本篇的新鲜出炉。同时,我将把上贴中的问题顺便也在此做以交代。2. 概念引入什么是接口? 接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称、参数和返回值。接口方法不能包含任何实现,CLR允许接口可以包含事件、属性、索引器、静态方法、静态字段、静态构造函数以及常数。但是注意:C#中不能包含任何静态成员???。一个类可以实现多个接口,当一个类继承某个接口时,它不仅要实现该接口定义的所有方法,还要实现该接口从其他接口中继承的所有方法。定义方法为:????publicinterface System.IComparable???? {????????int CompareTo(object o);???? }????publicclass TestCls: IComparable???? {????????public TestCls()???????? {???????? } ????????privateint _value;????????publicint Value???????? {????????????get { return _value; }????????????set { _value = value; }???????? } ????????publicint CompareTo(object o)???????? {????????????//使用as模式进行转型判断???????????? TestCls aCls = o as TestCls;????????????if (aCls != null)???????????? {????????????//实现抽象方法????????????return _value.CompareTo(aCls._value);???????????? }???????? }???? }什么是抽象类? 抽象类提供多个派生类共享基类的公共定义,它既可以提供抽象方法,也可以提供非抽象方法。抽象类不能实例化,必须通过继承由派生类实现其抽象方法,因此对抽象类不能使用new关键字,也不能被密封。如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。另外,实现抽象方法由overriding方法来实现。定义方法为:///summary/// 定义抽象类////summaryabstractpublicclass Animal{????//定义静态字段????staticprotectedint _id; ????//定义属性????publicabstractstaticint Id???? {????????get;????????set;???? } ????//定义方法????publicabstractvoid Eat(); ????//定义索引器????publicstringthis[int i]???? {????????get;????????set;???? } } ///summary/// 实现抽象类////summarypublicclass Dog: Animal{????publicstaticoverrideint Id???? {????????get {return _id;}????????set {_id = value;}???? } ????publicoverridevoid Eat()???? {???????? Console.Write(Dog Eats.)???? }} 3. 相同点和不同点3.1 相同点都不能被直接实例化,都可以通过继承实现其抽象方法。 都是面向抽象编程的技术基础,实现了诸多的设计模式。 3.2 不同点接口支持多继承;抽象类不能实现多继承。 接口只能定义抽象规则;抽象类既可以定义规则,还可能提供已实现的成员。 接口是一组行为规范;抽象类是一个不完全的类,着重族的概念。 接口可以用于支持回调;抽象类不能实现回调,因为继承不支持。 接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法。 接口可以作用于值类型和引用类型;抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。 通过相同与不同的比较,我们
文档评论(0)