事件的含义
事件类似于异常,都是由对象引发,并且可以通过我们提供的代码来处理。但是事件没有try...catch来处理事件,我们必须订阅事件。
订阅一个事件的含义是提供代码,在事件发生时执行,成为事件处理程序。
单个事件可供多个处理程序订阅,在该事件发生时,这些处理程序都会被调用。对事件处理方法的唯一限制是它必须匹配事件锁要求的返回类型和参数。这个限制是事件定义的一部分,由一个委托指定。
处理事件
可以使用+=运算符,给事件添加一个处理程序,其形式是使用时间处理方法初始化一个新委托实例,如
Timer myTimer = new Timer(100);
myTimer.Elapse += new ElapsedEventHandler(WriteChar);
可以添加任意多个处理程序,只要满足指定的条件即可。当引发时间时,会依次调用每个处理程序。
定义事件
使用event关键字,并指定要使用的委托类型就可以定义事件。以这种方式声明时间后,就可以引发它,做法是按名称来调用它,就行一个方法一样。
如果添加了多个处理程序,每个处理程序都返回一个值,我们将不知道返回哪一个。系统的处理方法是,只允许访问由时间处理程序最后返回的那个值,也就是最后一个订阅该时间的处理程序返回的值。
匿名方法
可以用下面的代码创建匿名方法:
delegate(parameters)
{
//Anonymous method code.
}
其中parameters是一个参数列表,匹配正在实例化的委托类型。
使用匿名方法时要注意,对于包含它们的代码块来说,它们是局部的,可以访问这个作用域内的局部变量。如果使用这样一个变量,它就成为了外部变量。在使用它们的匿名方法被销毁时,才会删除外部变量。