Skip to content

Event

delegate

  • 是一种类型,表示方法签名(可指向一个或多个方法)。
  • 本质是可调用对象,可以被直接赋值、调用、清空或替换。
  • 在声明它的作用域内,任何可见代码都能调用它(若不加限制)。
  • 更偏向函数指针/回调机制的抽象。

event

  • 不是新类型,而是对 delegate 的一种封装与访问控制机制。
  • 只能基于 delegate 类型声明。
  • 对外部代码只暴露订阅(+=)和取消订阅(-=)能力。
  • 只有声明该 event 的类内部才能触发(调用)它。
  • 语义上明确表达发布-订阅(Observer)模式。

区别

  • 控制权:delegate 调用权对外开放;event 将调用权限制在声明者内部。
  • 安全性:event 防止外部代码误触发或整体替换委托链。
  • 语义表达:event 表达“发生了某事”;delegate 表达“可以调用的方法”。

联系

  • event 必须以 delegate(或兼容的委托类型)为基础。
  • 两者底层都依赖多播委托(Multicast Delegate)机制。
  • delegate 是能力本身,event 是对这种能力的受控发布。

观察者模式

TODO