事件就是一个狭义的委托,也就是事件是一个用于事件驱动模型的专用委托.
通俗的讲,委托你能够在客户代码中直接调用委托来激发委托指向的函数,而事件不能够,事件的触发只能由服务代码本身触发
也就是说在你的代码里委托你不但能够安排谁是它的调用函数,还能够直接调用它,而事件不能直接调用,只能经过某些操做触发
你能够理解事件就是一个或多个委托,此话应该有误的吧,事件能够有多个事件处理函数,委托一样也能够是个多播委托程序员
委托的本质是引用类型,用于包装回调函数,委托用于实现回调机制;事件的本质是委托,事件是回调机制的一种应用。面试
为何要用委托
使用委托使程序员能够将方法引用封装在委托对象内。而后能够将该委托对象传递给可调用所引用方法的代码,而没必要在编译时知道将调用哪一个方法。与C或C++中的函数指针不一样,委托是面向对象,并且是类型安全的。安全
/* 道事件委托面试题 - 猫叫老鼠跑主人醒 */ using System; namespace CatCry { class MainClass { static void Main(string[] args) { Cat cat = new Cat(); // cat.OnMew += People.Wake; cat.Mew(); } } } public class Cat { public delegate void EventMiao(); public event EventMiao OnMew; public void Mew() { Console.WriteLine("miao...."); OnMew += People.Wake; OnMew += Mouse.Run; OnMew(); } } public class People { public static void Wake() { Console.WriteLine("人醒!"); } } public class Mouse { public static void Run() { Console.WriteLine("老鼠跑掉了!"); } }