网站大量收购独家精品文档,联系QQ:2885784924

第8章C#面向对象编程深入.pptVIP

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 C#面向对象编程深入 本章要点 8.1 接口 8.2 委托 8.3 事件 8.4 匿名方法 8.1 接口 8.1.1 定义接口 8.1.2 接口的实现 8.1 接口概述 定义接口的语法如下: [Access_modifier] interface Interface_identifier [:Base_interface_list] 在关键字之前,包含一个访问修饰符,后面紧跟着接口标识符。 [:Base_interface_list]可选部分,用于指定接口继承的父接口列表,接口允许多继承,所以从理论上讲,一个接口可继承无数个接口。 习惯上,接口标识符以大写字母I开头。因为,接口可以强制类实现抽象成员,所以接口标识符通常以_able结尾。 8.1.1 定义接口 接口成员 接口继承列表后面是接口的主体。主体由包围在大括号中的成员组成。合法的成员如下: 方法 属性 索引 事件 8.1.1 定义接口 注意: 所有的接口成员,都不能包含访问修饰符。所有成员都隐式地声明为public,因为它们要从实现接口成员所在的类的外部访问。在接口中定义的属性和索引可以有一个抽象的get访问器,或者一个抽象的set访问器,或者二者兼有。接口事件与普通事件的声明方式一样。 8.1.1 定义接口 接口与类 接口的定义很像类或结构,它定义了类必须实现的行为类型的特征,相当于一份使用者和实现者之间的合同。接口可以看做只包含抽象函数的纯抽象类。接口最终还是需要由类(或者结构)来实现,也就要求类要实现接口的抽象函数成员,这与派生类保证要实现它的基类的抽象函数一样。所以接口是通过动态捆绑函数调用纯抽象的基类的替代方式。 8.1.1 定义接口 即使接口和抽象类在句法和语义上紧密相关,但它们仍有一个重要的区别:接口只能包含抽象函数、抽象的属性和抽象的索引,而抽象类还可能包含数据成员,以及完全实现的函数、属性和索引。也正是如此,多重接口才不会像多重继承那样存在出现问题的可能性。如此一来,得到一个结论:一个类最多可以具有一个基类,但可以具有无限个接口。 8.1.2 实现接口 接口自身并不包含任何实现代码,落实这种定义了的“合同”的任务最终落到了类(或结构)身上。在C#中,实现接口的方式有两种: 隐式实现 显式实现 例子:ExplicitInterface.sln 8.1.2 实现接口 显式实现的主要用途是在有多个接口继承,并且两个或多个接口使用了同一个名称声明成员的场合。要执行显式实现,类中需要使用它的完全限定名来实现接口成员,而且在调用时,必须将类的对象实例转换成单独的接口类型。也就是说,要把类对象引用强制转换为接口类型来获取接口的引用。一旦有了接口的引用,我们就可使用点号来调用接口的方法。 对于隐式实现而言,它和直接由基类产生派生类的方式很相似。 例子:InterfaceExample.sln 8.2 委托 8.2.1 引例 8.2.2 定义委托 8.2.3 实例化委托 8.2.4 通过委托调用方法 8.2.5 多重委托 8.2 委托概述 编写源代码时,如果我们只知道特定的位置必定发生某动作,并不知道它的具体实现过程,就可以用委托。 C#的委托是一个类型安全方法引用,可以把引用存储为函数的类型。通过委托,程序能够在运行时刻动态地调用不同的方法。委托最重要的作用是建立支持事件的基础结构。 8.2.1 引例 例子: 在一个拥有多种降温设备(例如:电力空调、干冰降温机、气动降温机等)的生物实验室里,因为要完成某项试验,要求室内温度低于某个临界温度值。可以想见,如果实验室内温度显著升高或者达到某个较高值,就必须启用某些降温设备,来控制室内温度的升高。为此,就要求控制用的软件系统必须在适当的时候启用适当的降温设备。 8.2.1 引例 为此,设计的控制软件可以尝试采用下面这两种方式来实现: 软件驱动各个降温设备经常地测量室内温度,根据温度变化,各个降温设备自动启用。 使用一个监视室内温度的模块,当温度变化时,就启动合适的降温设备。 8.2.1 引例 这两种方式都有其弱点。 在第一种方式中,如果测量的频率太频繁,将耗费资源,影响软件性能,但如果测量次数太少,又可能会漏掉某些突然变化的情况,导致错过降温时机,所以不宜采用; 第二种方式面临的问题就是:对于不同的降温设备,要使用不同的控制方法,对于编程而言,会导致过于复杂,并难以维护。 8.2.1 引例 要解决这个问题,推荐使用委托。 委托与抽象方法一样,它指定了方法的返回类型和形式参数类型,但没有指定具体的实现过程,只

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档