事件功能是由三個互相聯繫的元素提供的:提供事件數據的類、事件委託和引發事件的類。.NET Framework 具有命名與事件相關的類和方法的約定。如果希望您的類引發一個名爲 EventName 的事件,您需要以下元素:
-
包含事件數據的類,名爲 EventNameEventArgs。該類必須從 System.EventArgs 導出。
-
事件的委託,名爲 EventNameEventHandler。
-
引發事件的類。該類必須提供事件聲明 (EventName) 和引發事件 (OnEventName) 的方法。
.NET Framework 類庫或第三方類庫中可能已經定義了事件數據類和事件委託類。在這種情況下,您就不需要定義這些類了。例如,如果您的事件不使用自定義數據,可以使用 System.EventArgs 作爲事件數據並使用 System.EventHandler 作爲委託。
使用 event 關鍵字在類中定義事件成員。當編譯器在類中遇到 event 關鍵字時,它會創建一個私有成員,例如:
private EventNameHandler eh = null;
編譯器還會創建兩個公共方法,即 add_EventName 和 remove_EventName。這些方法是事件掛鉤,它們允許委託與事件委託 eh 合併或從該事件委託中移除。這些詳細信息對程序員是隱藏的。
注意 |
---|
在除 C# 和 Visual Basic 2005 以外的其他語言中,編譯器可能不自動生成與事件成員對應的代碼,您可能需要顯式地定義事件掛鉤和私有委託字段。 |
定義事件實現後,您必須確定引發事件的時間。通過在定義事件的類或派生類中調用受保護的 OnEventName 方法來引發事件。OnEventName 方法通過調用委託,傳入所有事件特定的數據來引發事件。事件的委託方法可以執行事件操作或處理事件特定的數據。
注意 |
---|
受保護的 OnEventName 方法也允許派生類重寫事件,而不必向其附加委託。派生類必須始終調用基類的 OnEventName 方法以確保註冊的委託接收到事件。 |