委托和事件的区别

作者:Jaraxuss
链接:https://www.zhihu.com/question/21638630/answer/156701628
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

先不着急看代码 ,从字面上理解 “委托”,即:将事情托付给别人做,而非自己亲自做。宏观上看,委托就是一种通知机制,在我(通知者)需要做某事的时候,发起通知(Invoke),你们(委托列表中的订阅者)得到通知后,帮我完成某事(委托列表中的方法被顺序执行)。有些初学者可能觉得委托没什么用,不就是能传个方法名,然后委托Invoke后再顺序执行方法吗,我按顺序一个个调方法不也一样?其实,在C#中,因为取消了指针,很多事情,只能靠委托来完成。比如,在A类某方法中实例化B类,那么在A类中可以拿到B类被实例化的对象,就可以直接调用B类的方法,然而,如果想在B类中调用A类的方法,就没那么容易了,因为:B中拿不到A对象的指针。这时,只需要在B中声明一个委托,后在A中实例化B的时候,讲需要调用的方法注册进B的委托即可。这样,在B的委托Invoke时,A中的方法也会被调用。

而事件,本质上是一种特殊的委托对象,准确来讲,是“优化过”的委托对象。第一,在B类中定义了委托,若是public则可以在A类(或任何其他类)中被Invoke,即“冒充通知”了(因为原本B才是通知者,这样通知机智就被破坏了),若是事件,则不行(事件只允许在声明类中被Invoke);第二,委托对象可以用+=或-=注册或移除方法列表,但也能直接用=,这样之前被注册的方法列表将被覆盖,这样很容易造成程序员犯错误。反观事件,只能用+=/-=来注册/移除方法,杜绝了程序员犯错的可能性。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值