委托和事件的区别

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值