




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C 面向对象程序设计 主讲教师 胡鹏飞个人邮箱 hpf126 教学邮箱 xxu2009 2 我学习我快乐 我快乐我学习 6 1接口6 2委托6 3事件 第6章C 面向对象编程深入 3 我学习我快乐 我快乐我学习 6 1接口 6 1 1定义接口6 1 2接口的实现 4 我学习我快乐 我快乐我学习 接口 interface 主要用来控制类和结构实现特定的成员集 其中只包含方法 属性 索引或事件的签名 其实现则由继承该接口的类来定义 接口可以从一个或多个基类或接口继承 若有基类 则必须是出现在第一个位置 6 1 1定义接口 5 我学习我快乐 我快乐我学习 6 1 1定义接口 定义接口的一般形式 可访问性 interface接口名称 父接口 接口成员 6 我学习我快乐 我快乐我学习 6 1 1定义接口 接口成员接口继承列表后面是接口的主体 主体由包围在大括号中的成员组成 合法的成员如下 方法属性索引事件 7 我学习我快乐 我快乐我学习 6 1 1定义接口 注意 所有的接口成员 都不能包含访问修饰符 接口的所有成员都暗自成为abstract 我们不能为它提供缺省实现 接口的成员也都暗自成为public 因为它们要从实现接口成员所在的类的外部访问 我们不能以关键字abstract或public来修改 修饰 其中某个成员 8 我学习我快乐 我快乐我学习 6 1 1定义接口 接口与类接口的定义很像类或结构 它定义了类必须实现的行为类型的特征 相当于一份使用者和实现者之间的合同 接口可以看做只包含抽象功能成员的纯抽象类 接口最终还是需要由类 或者结构 来实现 也就要求类要实现接口的抽象功能成员 这与派生类保证要实现它的基类的抽象功能成员一样 9 我学习我快乐 我快乐我学习 6 1 1定义接口 接口与抽象类的区别 接口和抽象类在句法和语义上紧密相关 但它们仍有一个重要的区别 接口只能包含抽象函数 抽象属性和抽象索引 而抽象类还可能包含数据成员 以及完全实现的函数 属性和索引 一个类最多可以具有一个基类 但可以具有无限个接口 10 我学习我快乐 我快乐我学习 参看li6 1 6 1 2接口的实现 11 我学习我快乐 我快乐我学习 6 2委托 6 2 1引例6 2 2定义委托6 2 3实例化委托6 2 4多重委托 12 我学习我快乐 我快乐我学习 6 2 1引例 Person类一个人向另外一个人打招呼 publicvoidGreetPeople stringname 做某些额外的事情 比如初始化之类 此处略EnglishGreeting name 参看li6 2 13 我学习我快乐 我快乐我学习 委托简介 委托 delegate 是一种面向对象的 可靠的 类型安全的函数指针 函数引用 是事件的基础 委托的实例是对一个函数指针的语义进行抽象的对象 该对象封装了一个函数指针和一个目标对象 当一个委托被调用的时候 委托调用这个对象上的函数 委托具有一个签名和一个返回类型 分配函数指针给委托时 是基于签名的而不是基于类型的 14 我学习我快乐 我快乐我学习 委托简介 一旦为委托分配了方法 委托将与该方法具有完全相同的行为 委托方法的使用可以像其他任何方法一样 具有参数和返回值 与委托的签名 由返回类型和参数组成 匹配的任何方法都可以分配给该委托 这样就可以通过编程方式来更改方法调用 15 我学习我快乐 我快乐我学习 6 2 2定义委托 委托定义了方法的返回类型和参数类型 也创建了一种新类型 每个使用委托的方法都必须提供 委托也是一个类 它派生于基类System Delegate 和其他类一样 必须首先定义委托 然后才能实例化 下面给出了委托定义的语法 访问修饰符 delegate 类型 参数 如 publicdelegatevoidTestDelegate stringmessage 16 我学习我快乐 我快乐我学习 6 2 3实例化委托 定义了委托之后 必须要实例化委托 还需要委托的方法处理程序 这个方法实现具体的功能 其参数列表必须相同 并且必须返回同样的类型 然后再将这个方法赋给委托对象 通过将委托与命名方法关联 可以实例化委托 参看li6 3 17 我学习我快乐 我快乐我学习 publicdelegatedoubleCalculation doubleval1 doubleval2 publicclassExample CalculationCalcInstance publicdoubleMyMethod doubleval1 doubleval2 CalcInstance newCalculation MyMethod 6 2 3实例化委托 18 我学习我快乐 我快乐我学习 6 2 4多重委托 多重委托 multicastdelegate 是由两个或更多的其他委托构成的委托 它可以封装一个或多个方法 当调用多重委托时 会逐个调用封装的所有方法 这对于事件处理特别有用 19 我学习我快乐 我快乐我学习 6 2 4多重委托 在C 中 通过使用Combine方法和加法 运算符 可以把某个委托添加到一个多重委托中 类似地 通过使用Remove方法和删除 运算符 可以把某个委托从多重委托中删除 也可以把多个委托添加到一个多重委托中 当多重委托被调用时 已经添加的每个委托就按其被添加的顺序调用 多重委托不能有返回值 也不能使用out参数 但可以使用ref参数 参看li6 1 20 我学习我快乐 我快乐我学习 6 3事件 引例 假设我们有个高档的热水器 我们给它通上电 当水温超过95度的时候 1 扬声器会开始发出语音 告诉你水的温度 2 液晶屏也会改变水温的显示 来提示水已经快烧开了 现在我们需要写个程序来模拟这个烧水的过程 我们将定义一个类来代表热水器 我们管它叫 Heater 它有代表水温的字段 叫做temperature 当然 还有必不可少的给水加热方法BoilWater 一个发出语音警报的方法MakeAlert 一个显示水温的方法 ShowMsg 参看hoster 21 我学习我快乐 我快乐我学习 引例 为了使各个器件做的更加专业 现在热水器由三部分组成 热水器 警报器 显示器 它们来自于不同厂商并进行了组装 那么 应该是热水器仅仅负责烧水 它不能发出警报也不能显示水温 在水烧开时由警报器发出警报 显示器显示提示和水温 参看hoster2 22 我学习我快乐 我快乐我学习 思考 现在假设用户想在当水温超过95度的时候播放一曲MP3音乐怎么办 分析这种编程的方式的缺点是什么 编程员必须修改类Hoster的代码 这样就相当于用户需要拆装加热器 这样方式是用户不想做的 23 我学习我快乐 我快乐我学习 Observer设计模式 这里就出现了一个问题 如何在水快烧开的时候通知报警器和显示器 在继续进行之前 我们先了解一下Observer设计模式 Observer设计模式中主要包括如下两类对象 Subject 监视对象 它往往包含着其他对象所感兴趣的内容 在本范例中 热水器就是一个监视对象 它包含的其他对象所感兴趣的内容 就是temprature字段 当这个字段的值快到100时 会不断把数据发给监视它的对象 Observer 监视者 它监视Subject 当Subject中的某件事发生的时候 会告知Observer 而Observer则会采取相应的行动 在本范例中 Observer有警报器和显示器 它们采取的行动分别是发出警报和显示水温 24 我学习我快乐 我快乐我学习 在本例中 事情发生的顺序应该是这样的 警报器和显示器告诉热水器 它对它的温度比较感兴趣 注册 热水器知道后保留对警报器和显示器的引用 热水器进行烧水这一动作 当水温超过95度时 通过对警报器和显示器的引用 自动调用警报器的MakeAlert 方法 显示器的ShowMsg 方法 25 我学习我快乐 我快乐我学习 基本概念 事件 event 表示程序中发生一件事情的信号 使得多个独立设计的模块之间有机地 动态地结合成为一个可运行的系统 事件驱动程序 独立设计多个互相联系的模块 而在运行时根据事件发生的先后顺序动态地执行相关的事件处理代码 26 我学习我快乐 我快乐我学习 6 3 1定义事件 在C 中 事件实际上是委托的一种特殊形式 事件是为处理过程特制的更为专业化的委托 下面是定义事件的格式 modifiers eventtypename 其中modifiers 修饰符 和方法定义中的一样 可以使用new public protect private static virtual sealed override abstract 紧接着要使用关键字event 在名称之前 还必须确定事件的类型 因为所有的事件是一类特殊的委托 它们都是基于委托的 所以type必须是委托类型 27 我学习我快乐 我快乐我学习 事件 使用事件的一般步骤 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 庆阳市七下考试题及答案
- 湖北成考试题及答案本科
- 2025集团法务招聘考试真题及答案
- 2025化学教师考试真题及答案
- 难点解析人教版八年级上册物理光现象《光的直线传播》同步练习试卷(解析版含答案)
- 徐州二中考试题目及答案
- 2025年消防执业资格考试题库(消防应急救援装备)基础理论试题及答案
- 品牌维权技术路径-洞察与解读
- 技术驱动并购策略-洞察与解读
- 2025年《劳动关系协调员》考试复习题及参考答案
- 2025年及未来5年中国羊奶粉行业市场调研分析及投资战略咨询报告
- 学校物业委托管理服务合同7篇
- 2025-2026学年人教版二年级上册数学第三单元测试卷(含答案)(三套)
- 《守望成长法治护航》法制教育主题班会
- 桡骨骨折课件教学
- 2025年特种作业类冶金煤气作业理论知识-理论知识参考题库含答案解析(5卷)
- 2025-2030中国节能玻璃材料市场发展动态及竞争格局研究报告
- 数据标注课件
- 2025公安辅警招聘知识考试题(含答案)
- 劳动课包包子课件
- 教师教育心理学考试试题及答案
评论
0/150
提交评论