事件其实就是一个特殊的委托,对事件的声名其实就是声明一个私有的委托变量
你先把什么是委托搞清楚,就知道委托和事件的关系了
举个例子
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:事件和委托的关系是有点纠结,对于新手来说,过了这个坎儿,你就会觉得这个很简单,今天下午没事,花点时间举个例子来解答一下,不知道你明白了没
加了event后的委托被认为是个事件,当你使用事件的时候,输入+=后,系统会提示你按tab键完成事件处理方法的添加!
我感觉。其实委托和事件其实是差不多的东西。至于为什么要用。
我觉得主要的好处就是指针的好处了。
但是委托是规范的事件。
委托其实就是告诉你一个规范,按照一个规范的方法都可以被使用,而不是写死的某一个方法。所以委托允许+=和-=。这个是非常有优势的。因为我可以无视前面人员添加的触发事件,专心于现在添加的事件。当然之前添加的事件,就由添加的人来-=了。
代码永远不会只是一个人写的
假设有人用你写的people
但是你的代码已经发布,不能更改
那么事件就是提供给它一种可以自定义实现的好方法
这就是好处