.NET Event 事件与 delegate 委托 分析

  参考文章&图片来源:https://medium.com/@text2dipak/c-interview-prep-1-delegates-vs-events-1b6ef656d046

delegate

委托是一种类型安全的函数指针,用于指向签名匹配的方法

 

为什么使用

参考回调函数,解除被调用者与调用者之间的耦合性

 

 使用委托之前:

  如下代码客户端与请求操作LengthOperaion耦合度高

Method callback without delegate

 

使用委托之后:

  解除客户端与请求的耦合:

  1. 无需将客户端注入请求 
  2.  修改客户端回调方法时,无需修改Operation
  3. Operation可以在无需修改的情况下,给其它客户端调用

 

ps:委托有两种类型

  1.单一委托

  2.多播委托

event

事件是一种封装的委托

主要分为两部分 -- 类似于观察者模式

  • 推送者

唯一,定义事件,在符合特定条件下进行推送

  • 订阅者

 一或多,监听推送者的事件推送。提供一个方法(委托)给推送者,等满足特定条件时由推送者调用

 

 

Event publisher

 

 

 Q & A:

  1. Q:委托是否可以为空 ? 
    A:Yes

  2. Q:事件与委托的关系? 
    A:事件是一种特殊封装的委托

  3. Q:事件是否可以用委托来实现?
    A:可以

  4. Q:事件存在的意义? ---重点
    A:事件不支持 ‘ = ’ 的操作,防止客户端(注册者)使用 ‘ = ’ 重置了委托的订阅者方法清单,
      只允许添加或者移除

 

猜你喜欢

转载自www.cnblogs.com/Gilfoyle/p/12650963.html