事件其实就是一个特殊的委托,对事件的声名其实就是声明一个私有的委托变量你先把什么是委托搞清楚,就知道委托和事件的关系了举个例子 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:事件和委托的关系是有点纠结,对于新手来说,过了这个坎儿,你就会觉得这个很简单,今天下午没事,花点时间举个例子来解答一下,不知道你明白了没
转载于:https://www.cnblogs.com/goali/archive/2011/11/20/2255844.html
相关资源:各显卡算力对照表!