Skip to content

委托的介绍

  1. 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态赋给参数的做法,可以避免在程序中大量使用分支语句,同时系统也有很多的拓展性
  2. 使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(此时说调用,是因为此变量代表一个方法),可以依次调用所有绑定的方法

事件

  1. 事件至于委托,类似字符串类型中字段和属性的关系
  2. 声明一个事件类似于声明一个进行了封装的委托类型的变量,这个变量即便被声明为public,也会被定义为private.
  3. 实际使用时,之所有用事件而不用委托: 主要是考虑安全性

委托、事件与Observer设计模式

  • 实现热水器温度监控,触发报警器和显示器 项目

委托事件的解惑

  1. 为什么要使用事件而不是委托变量 除了封装性、易用性考虑外,最重要的一点是:事件应该由事件发布者触发,而不应该由客户端触发
  2. 为什么委托定义的返回值通常都是void
    1. 委托变量可供多个订阅者注册,如果定义了返回值,那么多个订阅者的方法都会向发布者返回数值,后值会覆盖前值,结果只能取到最后一个方法的返回值
    2. 发布者和订阅者是松耦合的,发布者不关心谁订阅了他,为什么订阅,因而也不会关系订阅者的返回值
  3. 如何让事件只允许一个客户订阅 使用等于号赋值
  4. 获得多个返回值与异常处理 通过*delegate.GetInvocationList()获取订阅的方法列表,再通过向下强制转换或调用*DynamicInvoke
  5. 委托中订阅者方法超时的处理 使用*BeginInvoke*进行异步调用