初学笔记(C#事件)

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)在事件接收者类中触发事件。

 

         初学笔记还望大家多多指点!!!

你可能感兴趣的:(C#)