摘抄:Delagate 与 event的区别

来源:互联网 发布:广州淘宝摄影工作室 编辑:程序博客网 时间:2024/05/18 12:37

·delegate定义一种签名的方式。  
      例:delegate   void   yourDelegateName(Type   param1,   Type   param2)。   yourDelegateName仅仅是一个名字,标示这种签名方式:(Type   param1,   Type   param2)包括返回值void。当然你也可以这样定义其它的签名:delegate   int   otherDelegateName(string   id,   string   name)等等。  
   
  ·event定义哪一种类型的事件。这里的类型便是指上面定义的yourDelegateName的delegate,因此,事件必须这样定义:event   yourDelegateName   yourEventName,这样就告诉事件接受方我这个事件的签名方式。  
   
  ·事件接受方必须定义一个符合(或者说对应)yourDelegateName签名方式的方法。例如:void   yourDo(Type   param1,Type   param2)。  
   
  ·最后,事件接受方将这个方法和事件联系起来:事件产生方.yourEventName   +=   new   yourDelegateName(yourDo)。因为yourDo方法是严格按照yourDelegateName签名的,因此只要传递方法名。当yourEventName事件发生时,这个事件会自己调用你的方法(yourDo)。  
   
  ·很显然,如果需要多路广播,可以这样:  
  事件产生方.yourEventName   +=   new   yourDelegateName(yourDo1);  
  事件产生方.yourEventName   +=   new   yourDelegateName(yourDo2);  
  ...  
  关键是你的自定义事件是用你的自定义委托声明的,接受方的事件响应方法是符合你的自定义委托的签名方法。   
   

 

-----------------------------------------------------------------------------------------------------------------------------------------------------

delegate(译为“委托”)其实就是对象方法指针,委托(delegate)根据其返回值分为两种既:一、一般委托   二、组潘委托(返回值为void),它可以通过重“+=”运算符指向多个对象方法,事件就用这种委托实现,如:  
              public   delegate   void   TestDelegate();  
              class   TData  
                  {  
                      private   int   data;  
                      punlic   event   TestDelegate   OnDataChange;  
                      public   int   Data  
                          {  
                              get  
                                  {    
                                        return   data;  
                                    }  
                              set  
                                    {  
                                          if(data!=value)$$(OnDateChange!=null)  
                                                {  
                                                    data=value;  
                                                    OnDateChange();  
                                                  }  
                                      }  
                              }  
                              public   void   PrintText()  
                                {  
                                    System.Console.Write("Data's   valus   is   Changed");  
                                  }  
                              public   TData()  
                                  {  
                                      OnDataChange+=new   TestDelegate(PrintText);  
                                      }  
                            }  
                            class   AppClass  
                                  {  
                                      public   static   void   Main()  
                                            {  
                                                  Tdada   AppData=new   Tdata();  
                                                  AppData.Data=5   //data变化,触发OnDataChange   事件  
                                              }  
                                    }  
  程序编译后输出:  
              Data's   value   is   changed  
  说明:  
          关键字event作用:1、说明这是一个事件处理过程   2、对事件委托只能进  
                                              行“+=”或“-=”操作。  

原创粉丝点击