Net面向对象程序设计-13-创建接口和定义抽象类-2010-2011-2分析.ppt

Net面向对象程序设计-13-创建接口和定义抽象类-2010-2011-2分析.ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Net面向对象程序设计-13-创建接口和定义抽象类-2010-2011-2分析

abstract class与interface 抽象类(abstract class)是一种特殊的类 抽象方法只做声明,而不包含实现,可以看成是没有实现体的虚方法 抽象类不能被实例化,除此之外,具有类的其他特性 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类 具体派生类必须覆盖基类的抽象方法 抽象类可以派生自另一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们 接口:是引用类型,类似于抽象类但又不同于抽象类 不能被实例化 只能包含实现的方法声明 成员可以包括方法、属性、索引器和事件 接口中不能包含常量、字段、构造函数、析构函数或静态成员 接口中的所有成员默认为public,接口中不能有private成员 派生类必须实现接口的所有成员 一个类可以实现多个接口 一个接口可以有多个父接口,实现该接口必须实现多有父接口中的所有成员 抽象类和接口的共同点 都可以被继承 都不能被实例化 都可以包含方法声明 派生类必须实现未实现的方法 抽象类和接口的区别 抽象类是一个不完整的类,需要进一步细化,而接口只是一个行为规范或规定,微软的自定义接口总是后带able字段,证明其是表述一类类“我能做…”. 抽象类可以定义字段、属性和方法实现。接口只能定义属性、索引器、事件、和方法声明,不能包含字段。 抽象类更多的是定义在一系列紧密相关的类之间,而接口大多数是定义在关系疏松但都实现某一功能的类中。 接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法。 接口可以被多重实现,抽象类只能被单一继承。即一个类一次可以实现若干个接口,但只能继承一个父类。 接口可以用于支持回调,而继承并不具备这个特点。 抽象类不能被密封。 抽象类实现的具体方法默认为虚的,但实现接口类的接口方法却默认为非虚的,当然也可以声明为虚的。 接口与非抽象类类似,抽象类也必须为在该类的基类表中列出接口的所有成员提供它自己的实现。但是,允许抽象类将接口方法映射到抽象方法上。 如果抽象类实现接口,则可以把接口中的方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口的方法。 抽象类和接口的使用 抽象类主要用于关系密切 的对象;而接口用于为不相关的类提供通用功能 如果要设计大的功能单元,则使用抽象类;如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。 如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的功能块,则使用接口。 如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本。 好的接口定义应该是具有专一功能性的,而不是多功能的,否则会造成接口的污染。如果一个类只是实现了这个接口中的一个功能,而不得不去实现接口的其他方法,那么就叫接口污染。 尽量避免使用继承来实现组件功能,而是使用黑箱复用,即对象组合。因为继承的层次增多,造成最直接的后果就是当你调用这个类群中的某一类时,就必须把它们全部加载到栈中!后果可想而知。同时,有心的朋友可以留意到微软在构建一个类时,很多时候都用到了对象组合的方法。比如中的\Page类,有Server、Request等属性,但其实它们都是某个类的对象。使用Page类的这个对象来调用另外类的方法和属性,是非常基本的一个设计原则。 * 接口的另一个应用示例 排序的实现:按姓名排序、分数、院系 一般性的实现过程:可重用于排序其他任何对象类型 示例:BubbleSortAscening.cs * 01: // Sort the elements of an array in ascending order 02: public static void BubbleSortAscending(int [] bubbles) 03: { 04: bool swapped = true; 05: 06: for (int i = 0; swapped; i++) 07: { 08: swapped = false; 09: for (int j = 0; j (bubbles.Length - (i + 1)); j++) 10: { 11: if (bubbles[j] bubbles[j + 1]) 12: { 13: Swap(j, j + 1, bubbles); 14: swapped = true; 15: } 16: } 17: } 18: } 19: 20: //Swap t

文档评论(0)

wbjsn + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档