1.本质:委托是类型安全的函数指针,可以指向一个或多个方法。事件是对委托的封装,提供受控的发布-订阅模型。
2.关键字:delegate和event。
3.访问权限:委托公有或私有,可被外部直接调用或赋值。事件外部只能通过 += 和 -= 订阅/取消订阅,触发权仅限于声明事件的类内部。
4.设计原则
- 优先使用事件:
当需要实现发布-订阅模型(如 UI 交互、模块解耦)时,事件能提供更安全的封装。 - 直接使用委托:
当需要灵活传递方法(如回调参数)或手动管理多播调用时,委托更合适。
| 特性 | 委托 | 事件 |
|---|---|---|
| 封装性 | 低 | 高 |
| 外部触发权限 | 有 | 无 |
| 多播支持 | 是 | 是 |
| 空引用处理 | 手动检查 | 自动处理 |
| 典型用途 | 回调、动态调用 | 发布-订阅模式 |