委托和事件的区别

来源:互联网 发布:ssr软件 编辑:程序博客网 时间:2024/06/09 19:27

        这块真是难啃的骨头啊,我总是想知道什么时候该用委托,什么时候该用事件,在写程序的时候总是摸不到头脑。经过最近的学习吧。有了一点体会吧。

        在.net框架中用到委托的地方真是数不盛数啊,异步编程,thread,timer,lambada表达式,处处都在用委托。

看了高手的博客理解了委托的3个用途,函数作为参数的传递,回调,还有就是事件了。

为啥那么多委托都没有返回值呢,这个就要研究多播委托的是怎么实现的了,这块也不细说了,还有就是如果多播委托如果有异常了,那岂不是委托链中的后面的函数就调不到了吗?所以在委托的multicastdelegate类中提供了静态方法GetInvocationlist返回委托数组,让你在有返回值或者有处理的情况下自行处理。

        回到正题,事件和委托的区别就是事件是在委托的基础之上实现,也有这种说法,事件是一种特殊的委托。特殊在哪里呢,委托是类,事件是委托类型的变量,加个event关键字,即使你把这个变量定义成public,C#编译器还是给它弄成private了,想一想,如果去掉这个event关键字,是不是就可以在外面直接调用委托对象了。再想一想,一个按钮的click事件,我们订购了,我们能不能主动的触发它呢?

所以,事件就是把委托进行了封装,并且这个事件的触发,不能在外面触发的,还是得回到类里触发。

0 0
原创粉丝点击