事件就是一個狹義的委託,也就是事件是一個用於事件驅動模型的專用委託.
通俗的講,委託你能夠在客戶代碼中直接調用委託來激發委託指向的函數,而事件不能夠,事件的觸發只能由服務代碼本身觸發
也就是說在你的代碼裏委託你不但能夠安排誰是它的調用函數,還能夠直接調用它,而事件不能直接調用,只能經過某些操做觸發
你能夠理解事件就是一個或多個委託,此話應該有誤的吧,事件能夠有多個事件處理函數,委託一樣也能夠是個多播委託程序員
委託的本質是引用類型,用於包裝回調函數,委託用於實現回調機制;事件的本質是委託,事件是回調機制的一種應用。面試
爲何要用委託
使用委託使程序員能夠將方法引用封裝在委託對象內。而後能夠將該委託對象傳遞給可調用所引用方法的代碼,而沒必要在編譯時知道將調用哪一個方法。與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("老鼠跑掉了!"); } }