C#事件委託概念
阿新 • • 發佈:2018-12-06
事件就是一個狹義的委託,也就是事件是一個用於事件驅動模型的專用委託.
通俗的講,委託你可以在客戶程式碼中直接呼叫委託來激發委託指向的函式,而事件不可以,事件的觸發只能由服務程式碼自己觸發
也就是說在你的程式碼裡委託你不但可以安排誰是它的呼叫函式,還可以直接呼叫它,而事件不能直接呼叫,只能通過某些操作觸發
你可以理解事件就是一個或多個委託,此話應該有誤的吧,事件可以有多個事件處理函式,委託同樣也可以是個多播委託
為什麼要用委託
使用委託使程式設計師可以將方法引用封裝在委託物件內。然後可以將該委託物件傳遞給可呼叫所引用方法的程式碼,而不必在編譯時知道將呼叫哪個方法。與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("老鼠跑掉了!"); } }