第11章 委托和事件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北京大学出版社
本章主要内容
11.1委托 委托 11.2事件 事件 11.3本章小结
3
C#面向对象程序设计案例教程
北京大学出版社
11.1委托 委托
11.1.1 案例说明 案例简介】 【案例简介】 本案例创建一个委托Tick,其中封装 方法, 本案例创建一个委托 ,其中封装RefreshTime()方法,该方法在输出 方法 窗口中显示系统的当前时间。 窗口中显示系统的当前时间。 案例目的】 【案例目的】 (1) 学会如何定义委托; 学会如何定义委托; (2) 掌握创建委托的实例的方法; 掌握创建委托的实例的方法; (3) 掌握如何用委托来封装方法。 掌握如何用委托来封装方法。 技术要点】 【技术要点】 (1) 创建一个控制台应用程序 创建一个控制台应用程序p11_1,在Program.cs中添加代码; , 中添加代码; (2) 按Ctrl+F5键编译并运行应用程序,输出结果如图 键编译并运行应用程序, 所示。 键编译并运行应用程序 输出结果如图11.1所示。 所示
15
8
C#面向对象程序设计案例教程
北京大学出版社
11.2事件 事件
11.2.1 案例说明 案例简介】 【案例简介】 系统时间。 本案例实现在输出窗口滚动显示一次 系统时间。定义静态方法 cfenttime(),功能是每秒钟产生一个事件脉冲,引发一次 ,功能是每秒钟产生一个事件脉冲, OnTimedEvent()方法 该方法引发一个tick事件 OnTimedEvent()方法,该方法引发一个tick事件。 方法, 事件。 【案例目的】 案例目的】 (1) 学会如何定义事件; 学会如何定义事件; (2) 掌握将委托的实例连接到事件。 掌握将委托的实例连接到事件。 技术要点】 【技术要点】 (1) 创建一个控制台应用程序 创建一个控制台应用程序p11_2,在Program.cs中添加代码; 中添加代码; , 中添加代码 (2) 按Ctrl+F5键编译并运行应用程序,输出结果如图 键编译并运行应用程序, 所示。 键编译并运行应用程序 输出结果如图11.2所示。 删除 所示 一次” “一次”
4
C#面向对象程序设计案例教程
北京大学出版社
11.1委托 委托
11.1.2代码分析 1. 定义委托 定义委托Tick,它带有 个int型参数 、mm、ss分别对应时间 型参数hh、 ,它带有3个 型参数 、 分别对应时间 的时、 的时、分、秒。 2.实例化委托为 实例化委托为tickers实例,并将 实例, 方法分配给该实例。 实例化委托为 实例 并将RefreshTime方法分配给该实例 方法分配给该实例 3.传入 传入hours、minutes、seconds共3个参数调用委托实例,显示 个参数调用委托实例, 传入 、 、 共 个参数调用委托实例 系统的当前时间。 系统的当前时间
10
C#面向对象程序设计案例教程
北京大学出版社
11.2事件 事件
11.2.3 相关知识及注意事项 1.事件的概念 . 事件既可以由用户的操作触发(如单击鼠标 按键盘上的某个键等), 如单击鼠标、 事件既可以由用户的操作触发 如单击鼠标、按键盘上的某个键等 , 也可以由程序逻辑触发(如执行完某个方法 如执行完某个方法、 也可以由程序逻辑触发 如执行完某个方法、某个对象的状态发生改变 等)。 。 触发事件的对象称为事件的发送者, 触发事件的对象称为事件的发送者,接收事件的对象称为事件接收者 。 在C#中,事件机制的特点: 中 事件机制的特点: (1) 事件和成员变量、成员方法、属性一样,也是类的一种成员; 事件和成员变量、成员方法、属性一样,也是类的一种成员; (2) 在.NET框架中,事件机制是通过委托来实现的,当一个事件被触发时, 框架中, 框架中 事件机制是通过委托来实现的,当一个事件被触发时, 由该事件的委托来通知(调用 处理该事件的相应方法。 调用)处理该事件的相应方法 由该事件的委托来通知 调用 处理该事件的相应方法。
9
C#面向对象程序设计案例教程
北京大学出版社
11.2事件 事件
11.2.2代码分析 1.通过在委托 通过在委托Tick前加 前加event修饰符定义事件 修饰符定义事件tick; 通过在委托 前加 修饰符定义事件 ; 2. 通过静态方法 通过静态方法cfenttime每秒钟产生一个事件脉冲,引发一次 每秒钟产生一个事件脉冲, 每秒钟产生一个事件脉冲 OnTimedEvent方法,该方法获取系统当前时间信息,引发 方法,该方法获取系统当前时间信息 引发tick事件; 事件; 方法 引发 事件 3.创建一个委托实例 具有与事件相同的类型)new Tick(RefreshTime), 3.创建一个委托实例(具有与事件相同的类型)new Tick(RefreshTime),使 创建一个委托实例(具有与事件相同的类型 用“+=”操作符将其连接到事件 ”操作符将其连接到事件tick,滚动显示系统的当前时间。 ,滚动显示系统的当前时间。
C#面向对象程序设计案例教程
第11章 委托和事件 11章
C#面向对象程序设计案例教程
北京大学出版社
教学目标
掌握在C#程序设计中如何实现委托和事件。 掌握在 程序设计中如何实现委托和事件。 程序设计中如何实现委托和事件 了解委托和事件的应用场合。 了解委托和事件的应用场合。
2
C#面向对象程序设计案例教程
5
C#面向对象程序设计案例教程
北京大学出版社
11.1委托 委托
11.1.3 相关知识及注意事项 1.委托的定义 . 委托是一种引用方法的类型。一旦为委托分配了方法, 委托是一种引用方法的类型。一旦为委托分配了方法,委托将与 该方法具有完全相同的行为。 该方法具有完全相同的行为。委托方法的使用可以像其他任何方 法一样,具有参数和返回值。委托是C#的一种新的类型 的一种新的类型, 法一样,具有参数和返回值。委托是 的一种新的类型,当要把 方法作为参数传递给其他方法时,就需要使用委托。 方法作为参数传递给其他方法时,就需要使用委托。 委托既可以引用静态方法,也可以引用实例方法。 委托既可以引用静态方法,也可以引用实例方法。可以把一个方 法赋给委托,通过委托调用该方法, 法赋给委托,通过委托调用该方法,而且同一个委托可以调用多 个不同的方法。 个不同的方法。 另外,委托是实现.NET框架中事件处理机制的基础。事件是 框架中事件处理机制的基础。 另外,委托是实现 框架中事件处理机制的基础 Windows编程中的一个非常重要的概念,在C#中事件可以看作是 编程中的一个非常重要的概念, 编程中的一个非常重要的概念 中事件可以看作是 委托的一种特殊形式。 委托的一种特殊形式。
13
C#面向对象程序设计案例教程
北京大学出版社
11.2事件 事件
11.2.3 相关知识及注意事项 3) 事件和委托的连接 创建一个委托实例(具有与事件相同的类型 然后使用“ ” 具有与事件相同的类型), 创建一个委托实例 具有与事件相同的类型 ,然后使用“+=”操作符将委 托实例连接到事件。 托实例连接到事件。 例如: 例如: //显示时间的委托分配给事件 显示时间的委托分配给事件 tick += new Tick(RefreshTime);
7
C#面向对象程序设计案例教程
北京大学出版社
11.1委托 委托
11.1.3 相关知识及注意事项 在应用程序中,可以像调用一般方法一样使用“委托实例” 在应用程序中,可以像调用一般方法一样使用“委托实例”来调 用方法。所调用的方法可以是静态方法, 用方法。所调用的方法可以是静态方法,也可以是实例方法和另 一个委托。 一个委托。 委托使用new运算符来实例化,同时将方法作为参数分配给委托 运算符来实例化, 委托使用 运算符来实例化 的实例,例如: 的实例,例如: Tick tickers = new Tick(RefreshTime); 3) 使用委托 通过委托对象的名称及放入括号中要传递给委托的参数来调用委 托对象。 托对象。 调用委托时,调用表达式的主表达式必须是委托类型的值,例如: 调用委托时,调用表达式的主表达式必须是委托类型的值,例如: tickers(hours, minutes, seconds);
12
C#面向对象程序设计案例教程
北京大学出版社
11.2事件 事件
11.2.3 相关知识及注意事项 2) 事件的引发 将事件当作一个方法那样使用圆括号, 将事件当作一个方法那样使用圆括号,必须提供恰当的实参以便于事件 的类型匹配,同时不要忘记检查事件是否为null。 的类型匹配,同时不要忘记检查事件是否为 。 例如: 例如: //事件通知 事件通知 static void Notify(int hours, int minutes, int seconds) { if (tick != null) { tick(hours, minutes, seconds); } }
14
C#面向对象程序设计案例教程
Fra Baidu bibliotek
北京大学出版社
11.3本章小结 本章小结
本章介绍了委托和事件的基本知识,解释了如何声明委托、 本章介绍了委托和事件的基本知识,解释了如何声明委托、如何给委 添加方法,并讨论了声明事件处理程序来响应事件的过程, 托 添加方法,并讨论了声明事件处理程序来响应事件的过程,以及如何 创建定制事件、使用引发事件的模式。 创建定制事件、使用引发事件的模式。.NET开发人员将大量使用委托和 开发人员将大量使用委托和 事件,特别是开发Windows Forms应用程序。事件是 应用程序。 事件,特别是开发 应用程序 事件是.NET开发人员监 开发人员监 视应用程序执行时出现的各种Windows消息的方式。 消息的方式。 视应用程序执行时出现的各种 消息的方式 在设计大型应用程序时,使用委托和事件可以减少依赖性和层的关联 在设计大型应用程序时, 并能开发出具有更高复用性的组件。 ,并能开发出具有更高复用性的组件。
6
C#面向对象程序设计案例教程
北京大学出版社
11.1委托 委托
11.1.3 相关知识及注意事项 2.委托的使用 . 使用委托和使用类相似,使用委托也分为两个步骤。 使用委托和使用类相似,使用委托也分为两个步骤。 1) 定义一个委托 C#使用关键字 使用关键字delegate来声明委托类型: 来声明委托类型: 使用关键字 来声明委托类型 [访问修饰符 delegate结果类型 委托标识符 形参列表 ; 访问修饰符] 形参列表]); 访问修饰符 结果类型 委托标识符([形参列表 委托类型可以在声明类的任何地方声明。 委托类型可以在声明类的任何地方声明。 例如上例: 例如上例: public delegate void Tick(int hh, int mm, int ss); 2) 实例化一个委托
11
C#面向对象程序设计案例教程
北京大学出版社
11.2事件 事件
11.2.3 相关知识及注意事项 2.创建和使用事件 . 1) 事件的定义 由于事件是由委托来执行的,所以在定义事件时, 由于事件是由委托来执行的,所以在定义事件时,必须明确指定由哪个 这个事件,事件的定义格式如下: 委托来委托 这个事件,事件的定义格式如下: [修饰符 event 事件的委托名 事件名 修饰符] 事件名; 修饰符 例如: 例如: //定义委托 定义委托 public delegate void Tick(int hh, int mm, int ss); //定义事件 定义事件 static event Tick tick; 改成“代理执行” 改成“代理执行”