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

敬阿奇,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)

1亿VIP精品文档

相关文档