百度百科:
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。 这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
数据结构本质:
委托和类一样,是一种用于封装命名或匿名方法的用户自定义引用类型。 委托和类同级,类表示数据集合,委托表示对一个或多个方法的引用,储存的是一系列具有相同参数和返回类型方法的地址列表,调用委托时,此委托列表的所有方法都将被执行。
语言框架角度:
委托是.net中函数回调机制的实现方式。 是函数指针在面向对象中的封装, 是面向对象的、类型安全的、可靠的函数指针。
特点:
使用事件或事件设计模式时
就是Observer设计模式,它定义了对象之间一对多的关系,并且通过事件触发机制关联它们。当一个对象中发生了某事件后,依赖它的其他对象会被自动触发并更新。
需要封装静态方法时
委托绑定的方法可以是静态方法、非静态方法和匿名方法,而C#中接口不能是静态的。
调用方不需要访问实现该方法的对象中的其他属性、方法或接口时
类中的某个成员函数绑定到委托,调用该方法时只与这个成员函数有关,与该类里的其他属性无关。
需要方便的组合时
一个委托绑定的多个方法可以自由组合。一个委托的对象可以绑定多个方法,而且这多个方法是没有限制可以任意组合的,委托灵活的绑定和解绑定策略使得使用非常方便。
类可能需要该方法的多个实现时
一个委托的对象可以绑定多个方法(多播委托),当我们运行时需要的不是单一的方法时,接口很难实现。