敬阿奇,C#程序设计教程(第3版),第4章.ppt

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

4.7.1 委托 【例4.25】委托示例。 运行结果如图4.26所示。 4.7.1 委托 2. 多播 相对于上面的一次委托只调用一个方法,一次委托也可以调用多个方法,称为多播。通过+和-运算符实现多播的增加或减少。 【例4.26】多播示例。 运行结果如图4.27所示。 4.7.1 委托 委托是从System.Delegate类派生而来,多播则派生于System.Delegate的派生类System.MulticastDelegate,对于下面代码: SomeDelegate d3 =d1+ d2; 也可以用Delegate.Combine方法写成: SomeDelegate d3 = (SomeDelegate) Delegate.Combine(d1, d2); 也可以使用MulticastDelegate.Combine的方法写成: SomeDelegate d3 =(SomeDelegate)MulticastDelegate.Combine(d1,d2); 4.7.2 事件 C#事件是按“发布-预订”的方式工作。先在一个类中公布事件,然后就可以在任意数量的类中对事件预订。事件的工作过程可以用图4.28表示: 4.7.2 事件 C#事件机制是基于委托实现的,因此要首先定义一个委托EventHandler: public delegate void EventHandler(object from , myEventArgs e) System.EventArgs是包含事件数据的类的基类,在代码中可直接使用EventArgs类。myEventArgs类派生于EventArgs类,实现自定义事件数据的功能。这里from表示发生事件的对象。 定义事件格式为: event 事件的委托名 事件名 如事件TextOut定义: public event EventHandler TextOut; 事件的激活一般写成: if (TextOut != null) TextOut(this,new EventArgs()); 4.7.2 事件 检查TextOut事件有没有被订阅,如不为null,则表示有用户订阅。订阅事件的是TestApp类,首先实例化EventSource,然后订阅事件: evsrc.TextOut += new EventSource.EventHandler(CatchEvent); 也可以取消订阅: evsrc.TextOut -= new EventSource.EventHandler(CatchEvent); 方法evsrc.TriggerEvent()激活事件,如果已经订阅了事件,则调用处理代码,否则什么也没有不执行。 4.7.2 事件 【例4.27】事件示例。 运行结果如图4.29所示。 4.8 预处理命令 4.8.1 #define、#undef指令 #define和#undef指令是用于定义符号和取消符号定义的预处理指令。 #define DEBUG #undef DEBUG 这里定义和取消的符号是DEBUB。如果定义的符号已经存在,#define则不起作用,同样道理,如果符号不存在,#undef也就没有任何作用。#define和#undef指令必须放于源程序的代码之前。 using System; #define DEBUG 4.8.2 #IF、#ELIF、#ELSE、#ENDIF指令 #if、#elif、#else、#endif指令被用作条件编译,它们类似于if/else结构。#if和#elif后的标识符表达式可以使用运算符与()、或(||)、非(!)。它们在程序中结构如下所示: 一条#if 语句(必须有) 零或多条#elif 语句 零或一条#else 语句 一条#endif 语句(必须有) 【例4.28】预处理示例。 运行结果如图4.30所示。 4.8.2 #IF、#ELIF、#ELSE、#ENDIF指令 当执行到#if语句,首先检查DEBUG是否已经定义,如果符号已经定义,就编译#if块中的代码,否则编译#else块中的代码。 #elif指令相当于“else if”。 【例4.29】#elif指令。 运行结果如图4.31所示。 4.8.3 #WARNING、#ERROR指令 #warning、#error指令用于产生警告或错误。当编译器遇到#warning指令时,会显示#waring后面的文本,编译还会继续进行。当遇到#error指令时,会显示后面的文本,并终止编译退出。这两条指令可以用于检查#define是否定义了什么不正确的符号。 #define DEBUG #define RELEASE #if DEBUG #error 你定义了DEBUG #end

您可能关注的文档

文档评论(0)

文档精品 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:6203200221000001

1亿VIP精品文档

相关文档