C#事件處理簡單分析
C#語言還是比較常見的東西,這里我們主要介紹C#事件處理,包括介紹ActiveX控件的事件接收等方面。
C#事件處理
當你寫一個類時,有時有必要讓類的客戶知道一些已經發生的事件。如果你是一個具有多年編程經驗的程序員,似乎有很多的解決辦法,包括用于回調的函數指針和用于ActiveX控件的事件接收(event sinks)。現在你將要學到另外一種把客戶代碼關聯到類通知的辦法——使用事件。
事件既可以被聲明為類域成員(成員變量),也可以被聲明為屬性。兩者的共性為,事件的類型必定是代表元,而函數指針原形和C#的代表元具有相同的含義。
每一個事件都可以被0或更多的客戶占用,且客戶可以隨時關聯或取消事件。你可以以靜態或者以實例方法定義代表元,而后者很受C++程序員的歡迎。
既然我已經提到了事件的所有功能及相應的代表元,請看清單5.11中的例子。它生動地體現了該理論。
下列代碼在類中實現C#事件處理:
- using System;
- // 向前聲明
- public delegate void EventHandler(string strText);
- class EventSource
- {
- public event EventHandler TextOut;
- public void TriggerEvent()
- {
- if (null != TextOut) TextOut("Event triggered");
- }
- }
- class TestApp
- {
- public static void Main()
- {
- EventSource evsrc = new EventSource();
- evsrc.TextOut += new EventHandler(CatchEvent);
- evsrc.TriggerEvent();
- evsrc.TextOut -= new EventHandler(CatchEvent);
- evsrc.TriggerEvent();
- TestApp theApp = new TestApp();
- evsrc.TextOut += new EventHandler(theApp.InstanceCatch);
- evsrc.TriggerEvent();
- }
- public static void CatchEvent(string strText)
- {
- Console.WriteLine(strText);
- }
- public void InstanceCatch(string strText)
- {
- Console.WriteLine("Instance " + strText);
- }
- }
【編輯推薦】