引發事件
更新:2007 年 11 月
事件功能由三個相互關聯的項目來提供:提供事件資料的類別、事件委派和引發事件的類別。.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 中移除的事件攔截程序 (Hook)。這些詳細資料是程式設計人員所看不到的。
注意事項: |
---|
在 C# 和 Visual Basic 2005 以外的語言中,編譯器可能不會自動產生對應事件成員的程式碼,因此您可能必須明確地定義事件攔截程序和私用委派欄位。 |
一旦定義了事件實作,您就必須決定何時要引發事件。您可以在定義此事件的類別或衍生類別中呼叫受保護的 OnEventName 方法,藉此引發事件。OnEventName 方法會叫用 (Invoke) 委派,傳入任何事件特定的資料,藉以引發事件。事件的委派方法可以為事件執行動作,也可以處理事件特定的資料。
注意事項: |
---|
受保護的 OnEventName 方法也允許衍生類別 (Derived Class) 覆寫該事件,而不附加委派到它上面。衍生類別必定要呼叫基底類別的 OnEventName 方法以確保註冊的委派能接收事件。 |
當您想要處理在其他類別中引發的事件時,可以在事件中加入委派方法。如果您不太熟悉 .NET Framework 中事件的委派模型,請參閱事件和委派。