Delegate和Event,在C#中,常常看到他们在一起使用,这其中有什么奥秘呢,在这里我说说我看到的,我们以下边的代码为例:

 1说说Delegate和Eventusing System;
 2说说Delegate和Event
 3说说Delegate和Event//Delegate
 4说说Delegate和Eventdelegate void UpdateDelegate();
 5说说Delegate和Event
 6说说Delegate和Event//Subject
 7说说Delegate和Eventclass Subject
 8}
类Subjuect中的委托(UpdateDelegate)之前有event关键字,它的IL视图为:
说说Delegate和Event
如果我们把委托(UpdateDelegate)之前的event关键字去掉,它的IL视图为:
说说Delegate和Event
两幅图对比之下,我们就会发现,加上Event关键之和去掉Event关键字所产生的IL代码大不相同。
我们再来看看Main函数中使用的不同
如果我们去掉委托(UpdateDelegate)之前的event关键字,下边Main方法中的写法都是对的,在编译的时候不会报错。
1说说Delegate和Event    public static void Main(string[] args)
2    }
如果我们在委托(UpdateDelegate)之前加上event关键字
 1说说Delegate和Event    public static void Main(string[] args)
 2    }
C#中,delegate是multicast的。multicast就是delegate可以同时指向多个函数。一个multicast   delegate维护着一个函数的list,如果我们没有用+=,而是直接把函数指派给了delegate,这样的话,其他已经钩上delegate的函数都被去掉了,从这里我们就可以看出,使用event可以防止我们直接把函数指派给delegate,从机制上保证了delegate函数链不被破坏。

相关文章: