第12章委托和事件 委托( delegate)是C#的特有的成分, delegate又被译为代表、 代理、指代等。委托的功能类似于C或C++中的函数指针,但是 委托是一种特殊的对象,与函数指针相比,委托有更多的功能, 并且保持了C#的面向对象和类型安全的先进性 事件( event)是对象之间通信的重要环节,也是事件驱动式应 用程序的关键内容。在 Window窗体应用程序、Web应用程序等系 统中,事件和委托往往配合工作,相得益彰。 12.1委托 运用数组类型可以将同一种类型的数据组织起来;运用多态技术 可以把同一基类的派生类对象组织起来,委托也有这样的功能, 委托可以将具有相同参数列表和返回类型的方法组织起来。委托 主要有两个用途:方法回调和事件处理
第12章 委托和事件 委托(delegate)是C#的特有的成分,delegate又被译为代表、 代理、指代等。委托的功能类似于C或C++中的函数指针,但是 委托是一种特殊的对象,与函数指针相比,委托有更多的功能, 并且保持了C#的面向对象和类型安全的先进性。 事件(event)是对象之间通信的重要环节,也是事件驱动式应 用程序的关键内容。在Window窗体应用程序、Web应用程序等系 统中,事件和委托往往配合工作,相得益彰。 ◼ 12.1 委托 运用数组类型可以将同一种类型的数据组织起来;运用多态技术 可以把同一基类的派生类对象组织起来,委托也有这样的功能, 委托可以将具有相同参数列表和返回类型的方法组织起来。委托 主要有两个用途:方法回调和事件处理
12.1.1委托声明和委托对象 ■12.1.1.1引例 ■121.1.2声明委托类型 声明委托的格式如下 特性修饰符 delegate返回类型委托类型名(参数列表); 其中:特性、修饰符和参数列表是可选项;允许使用的修饰符有: new、pub|ic、 internal、 protected和 private 用关键字 delegate声明的委托是一个类,这样的语法现象类似 于用关键字cass声明一个自定义的类。委托类型名、返回类型 和参数列表共同构成一个委托的签名。也是区分不同委托的依据
12.1.1 委托声明和委托对象 声明委托的格式如下: 特性 修饰符 delegate 返回类型 委托类型名 (参数列表); 其中:特性、修饰符和参数列表是可选项;允许使用的修饰符有: new、public、internal、protected和private。 用关键字delegate声明的委托是一个类,这样的语法现象类似 于用关键字class声明一个自定义的类。委托类型名、返回类型 和参数列表共同构成一个委托的签名。也是区分不同委托的依据。 ◼ 12.1.1.1 引例 ◼ 12.1.1.2 声明委托类型
121.1.3委托对象 创建委托对象就是实例化一个委托,其格式为: 委托对象=new委托名(关联方法) 其中,参数是关联方法名,是被封装的方法,对于静态方法, 委托对象封装要调用的方法;对于实例方法,委托对象同时封 装一个实例和该实例上的一个方法。委托对象封装方法时并不 论该方法属于什么类,只要该方法的参数列表和返回类型满足 条件即可。 声明委托类和创建委托对象也可以用一句语句同时完成
12.1.1.3 委托对象 创建委托对象就是实例化一个委托,其格式为: 委托对象 = new 委托名(关联方法); 其中,参数是关联方法名,是被封装的方法,对于静态方法, 委托对象封装要调用的方法;对于实例方法,委托对象同时封 装一个实例和该实例上的一个方法。委托对象封装方法时并不 论该方法属于什么类,只要该方法的参数列表和返回类型满足 条件即可。 声明委托类和创建委托对象也可以用一句语句同时完成
121.1.4调用委托 调用委托需要用委托对象名和实参列表,与调用一般方法的格式 没有差别。 在使用术语方面,通常不区分委托对象和委托的调用形式,都简 称为委托。 委托封装了方法,委托中包含的是方法的引用。委托允许在执行 时传入方法名,动态地决定要调用的方法,调用委托时才知道委 托中包含的方法名
12.1.1.4 调用委托 调用委托需要用委托对象名和实参列表,与调用一般方法的格式 没有差别 。 在使用术语方面,通常不区分委托对象和委托的调用形式,都简 称为委托。 委托封装了方法,委托中包含的是方法的引用。委托允许在执行 时传入方法名,动态地决定要调用的方法,调用委托时才知道委 托中包含的方法名
1212委托的多播(组合) 委托的多播又称为委托组合。委托可以封装更多的方法,方法可以加 入到委托中,也可以从委托中移除,这样的特点是一般函数指针所不 可能具备的。 个委托封装多个方法以后,调用委托对象就是调用其中所有的方法, 这些被封装的方法又称为调用列表。调用列表可以包含重复的方法 在调用期间,委托按方法出现在调用列表中的顺序来调用方法。委托 试图调用其调用列表中的每个方法,而重复方法在调用列表中出现 次就调用一次 当委托所调用的方法包含返回值时,委托返回调用列表中最后一个方 法的返回值。当方法中包含由引用传递的参数时,该参数的最终值就 是调用列表中每个方法的结果,这些方法依次执行并更新参数的值 可以用运算符“+号将方法加入到调用列表中;用运算符“”号将已 经在调用列表中的方法从调用列表中移除
12.1.2 委托的多播(组合) 委托的多播又称为委托组合。委托可以封装更多的方法,方法可以加 入到委托中,也可以从委托中移除,这样的特点是一般函数指针所不 可能具备的。 一个委托封装多个方法以后,调用委托对象就是调用其中所有的方法, 这些被封装的方法又称为调用列表。调用列表可以包含重复的方法。 在调用期间,委托按方法出现在调用列表中的顺序来调用方法。委托 试图调用其调用列表中的每个方法,而重复方法在调用列表中出现一 次就调用一次。 当委托所调用的方法包含返回值时,委托返回调用列表中最后一个方 法的返回值。当方法中包含由引用传递的参数时,该参数的最终值就 是调用列表中每个方法的结果,这些方法依次执行并更新参数的值。 可以用运算符“+”号将方法加入到调用列表中;用运算符“-”号将已 经在调用列表中的方法从调用列表中移除