1.声明事件
EventHandler是一个预定义的委托,它定义了一个无返回值的方法。在 .Net Fromwork中,他的格式:
public delegate void EventHandler (Object sender, EvenArgs e)
其中sender的类型为Object,表示时间发布者本身,e用来传递事件的相关信息,数据类型为EvenArgs及其派生类。
标准的EvenArgs并不包含任何事件数据, 因此EventHandler专用于表示不生成数据的事件的事件方法。如果要事件生成数据,则必须提供自定义的事件类型,该类型从EventArgs派生,提供保存时间数据所需要的全部字段或属性,这样时间发布者可以将特定的数据发送给接收者。
用标准的EventHandler委托可以声明不包含数据的标准事件:
public event EvenHandler 事件名;
要生成包含数据的事件,必须先自定义事件数据类型,有两种:
(1)先定义委托,再定义事件。
public class 事件数据类型 : EventArgs {//封装信息;}
public delegate 返回值类型 委托类型名 (Object sender, 事件数据类型 e);
public event 委托类型 事件名;
(2)使用泛型EventHandler定义事件。
public class 时间数据类型 : EventArgs {//封装信息;}
public event EventHandler<时间数据类型>事件名;
2.订阅事件
声明事件的实质是定义一个数据变量,并不意味着就能成功触发事件,还要:(1)在事件的接收者中定义一个方法来响应时间,(2)通过创建委托对象把事件与事件方法联系起来(又称绑定事件或订阅事件)。负责绑定事件与事件方法的类就称为时间的订阅者。
事件名 += new 事件委托名(事件方法);
注意:
(1)订阅事件的操作由事件的接收者实现。
(2)每个事件都可以有多个处理程序,多个程序按顺序调用。如果一个处理程序发生异常,还未处理的程序则没有机会接受事件。为此,建议事件处理程序迅速处理事件,并避免发生异常。
(3)订阅事件必须见一个与事件具有相同类型的委托对象,把事件方法当作委托目标,使用“+=”运算符把事件方法添加到源对象的事件中。
(4)若要取消订阅事件,可使用“-=”。
3.触发事件
在C#中,触发事件与委托点用相同,但要注意使用匹配的事件参数。事件一旦触发,相应的事件方法就会被调用,如果该事件没有任何处理程序,则该事件为空。
4.总结:
第一步:定义相关信息类;
第二步:定义事件警报器;
第三步:声明事件产生时调用的方法;
第四步:订阅事件;
第五步:触发事件;
5.采用基于事件驱动模型进行程序设计,其实过程包括五部分:
(1)定义事件相关信息类;
(2)在事件发布者类(事件源)中声明事件,并声明一个负责触发事件的方法;
(3)在事件接受者类中声明事件产生时调用的方法;
(4)在事件接受者类中订阅事件;
(5)在事件接收者类中触发事件。
初学笔记还望大家多多指点!!!