摘引 委托和事件

事件其实就是一个特殊的委托,对事件的声名其实就是声明一个私有的委托变量
你先把什么是委托搞清楚,就知道委托和事件的关系了
举个例子
 public void EnglishGreeting(string name)   
 {      
  Console.WriteLine("Morning, "+ name);   
  }
public void ChineseGreeting(string name)   
{       
  Console.WriteLine("早上好, "
 + name);   
}

public enum Language 
  {
   English, Chinese  
  }    
public void GreetPeople(string name, Language lang)
   { 
       //做某些额外的事情,比如初始化之类,此处略
        switch (lang)      
      { 
       case Language.English:    
       EnglishGreeting(name);
       break;
       case Language.Chinese:             
       ChineseGreeting(name);              
       break
;      }   

这个语句当我们传入姓名name的参数,比如说"jack" 进去的时候将调用
EnglishGreeting方法,相反传name为“杰克"将调用ChineseGreeting方法
很显然这个语句的扩展性很差 ,如果再添加其他语言版的,那就得反复的去修改GreetPeople()方法,这个非常不方便
  委托就可以解决上面的问题
  public delegate void GreetingDelegate(string name);
 在这里定义了委托,它代表方法的类型,这里代表EnglishGreeting和ChineseGreeting方法

static void Main(string[] args)      
 {           
  GreetingDelegate delegate1;           
  delegate1 =  EnglishGreeting;       // 先给委托类型的变量赋值
  delegate1 += ChineseGreeting;       // 给此委托变量再绑定一个方法
   // 将先后调用 EnglishGreeting 与 ChineseGreeting 方法
    GreetPeople("Jimmy Zhang", delegate1);          
   Console.ReadKey();       
}
也就是说此时委托代表EnglishGreeting 和ChineseGreeting 方法类,想当于他们的摸板(不知道楼主懂这句话不?)然后将这2个方法绑到此委托变量中,调用此变量的时候将依次执行上面的2个方法
这里输出结果为
Morning, Jimmy Zhang
早上好, Jimmy Zhang

早上好, 张子阳

到这里楼主明白了,委托的好处了吗??

事件顾名思义,就是发生的事情,一个事件中包含一些方法。那些方法都串联起来发生的的,即然如此肯定就和委托有关系,委托也是包含了一些方法,
先面看看看事件的声明方式
 public event GreetingDelegate MakeGreet;
是吧?声明一个事件不过类似于声明一个委托类型的变量而已。
  MakeGreet = EnglishGreeting;                   
  MakeGreet += ChineseGreeting;
一样也是绑定方法,和委托一样
现在你应该明白为什么一个事件需要一个委托了把
事件其实就是委托,
不知道说了这多你明白了没
汗。。了

PS:事件和委托的关系是有点纠结,对于新手来说,过了这个坎儿,你就会觉得这个很简单,今天下午没事,花点时间举个例子来解答一下,不知道你明白了没

posted @ 2011-11-20 11:01  程序猿的粪  阅读(117)  评论(0)    收藏  举报