Event
delegate¶
- 是一种类型,表示方法签名(可指向一个或多个方法)。
- 本质是可调用对象,可以被直接赋值、调用、清空或替换。
- 在声明它的作用域内,任何可见代码都能调用它(若不加限制)。
- 更偏向函数指针/回调机制的抽象。
event¶
- 不是新类型,而是对 delegate 的一种封装与访问控制机制。
- 只能基于 delegate 类型声明。
- 对外部代码只暴露订阅(+=)和取消订阅(-=)能力。
- 只有声明该 event 的类内部才能触发(调用)它。
- 语义上明确表达发布-订阅(Observer)模式。
区别¶
- 控制权:delegate 调用权对外开放;event 将调用权限制在声明者内部。
- 安全性:event 防止外部代码误触发或整体替换委托链。
- 语义表达:event 表达“发生了某事”;delegate 表达“可以调用的方法”。
联系¶
- event 必须以 delegate(或兼容的委托类型)为基础。
- 两者底层都依赖多播委托(Multicast Delegate)机制。
- delegate 是能力本身,event 是对这种能力的受控发布。
观察者模式¶
TODO