標籤:static listen targe net class handler 委託 read public
事件基於委託,可以任何一種委託類型提供一種發布\訂閱機制。
使用event關鍵字將一個委託類型定義為事件。
下面通過一個例子介紹事件:
//事件發布類 public class PublishEvent { public delegate string Display(string str); public event Display DisplayEvent; //用戶端代碼通過調用這個方法觸發事件 public void Shows(string str) { if (DisplayEvent != null) { DisplayEvent(str); } } } //事件偵聽類,這個類訂閱事件 public class Listen1 { public string MakeAlert(string str) { Console.WriteLine(str + "Listen1"); return str + "Listen1"; } } public class Listen2 { public string ShowMsg(string str) { Console.WriteLine(str + "Listen2"); return str + "Listen2"; } }
用戶端代碼:
class Program { static void Main() { PublishEvent pe = new PublishEvent(); Listen1 l1 = new Listen1(); Listen2 l2 = new Listen2(); //變數l1和l2訂閱了事件 pe.DisplayEvent += l1.MakeAlert; pe.DisplayEvent += l2.ShowMsg; //觸發事件 pe.Shows("事件"); Console.ReadKey(); } }
事件就是一個特殊的委託(http://www.cnblogs.com/afei-24/p/6762442.html),它是一個用於事件驅動模型的專用委託.你可以在客戶代碼中直接調用委託來激發委託指向的函數,而事件不可以,事件的觸發只能由服務代碼自己觸發。也就是說在你的代碼裡委託你不但可以安排誰是它的調用函數,還可以直接調用它,而事件不能直接調用,只能通過某些操作觸發。除此之此,事件擁有委託的所有功能,包括多播特性。即事件可以有多個事件處理函數,委託同樣也可以是個多播委託.
事件是封裝過的委託執行個體;委託是類型,事件是執行個體!
EventHandler<TEventArgs>.NET內建的委託,也用於定義事件。(可以去MSDN研究)
C#之事件