第九章  委托和事件

一、委托概述

1.什么是委托

·委托C#中的内置引用类型,类似于C/C++中的函数指针

·不同的是委托是一种安全的封装方法的类型

·委托包含对方法的引用

2.委托的作用

·委托将名称与方法的定义连接起来,即将方法的实现附加到该名称

·使用委托可以在运行时动态设定要调用的方法

3.优点:

·不知道方法名称也可以调用方法,执行一个委托的同时就会执行该委托引用的方法

4.声明委托

Delegate 返回类型 委托名 参数列表(返回类型和参数列表必须和将要调用的方法一致,否则委托不到这个方法)

5.实例化委托

“new 委托名(方法名)   (注:方法名后不加圆括号)” ,此方法名使委托指向该方法

6.语法

·调用委托时将方法传入

·与调用方法相同

·与方法的区别:委托时没有实现的,实际调用的是方法的实现

·委托的形参名在以后的调用中用不到,只要参数类型一致即可,参数名可以任意定义

7.多路广播委托

二、事件概述

1.什么是事件

·事件是类在发生其关注的事情时用来提供通知的一种方式

·使用事件,对象可以将关于事件或已发生变化的信息通知其他对象

·事件使用委托来为触发时将调用的方法提供类型安全的封装

·发行者:把发生的事件信息通知其他对象的对象

·订阅者:注册(订阅)到事件的对象

3. 声明事件

·定义委托,然后定义事件

4.订阅事件

·添加一个委托,事件引发时该委托将调用一个方法

5.引发事件

·语法:与调用方法相同

·先判断是否有对象订阅该事件

·事件的触发一般放在一个方法中,该方法必须放在定义事件的类中

6步骤:①定义事件 ②给对象预订该事件 ③通知事件的订户

·事件基于委托来实现,要声明事件必须先声明委托

7.带参数的事件

·参数传递方向与方法不同,事件是从类内部向外部传递,而方法是将类外部的实例作为参数传入类内部的方法

·事件参数的类型通常都继承于System.EventArgs类

·事件的委托通常都返回Void,并且带有两个参数

·事件要先被委托到方法才能执行

8.匿名方法

·要将代码块传递为委托参数,创建匿名方法则是唯一的方法

·如果使用匿名方法,则不必创建单独的方法,因此减少了实例化委托所需要的编码系统开销

·事件可以是静态的,而委托不可以是静态的。