事件驅動是 Windows 應用程式的核心特徵。C# 委派用於產生事件,事件則用於在元件中監聽該元件的變化。以下提供一個簡單完整的範例,示範自訂事件來源類別、委派定義、事件觸發與處理函式註冊的完整流程。
// 定義事件委派
public delegate void EventHandler(string str);
// 事件來源類別
class EventSource
{
// 定義委派作為事件成員
public event EventHandler Say;
public void TriggerEvent()
{
if (this.Say != null)
// 執行委派,實際操作由註冊的事件處理函式決定
Say("A event take place!");
}
}
// 測試類別
class Test
{
public static void Main()
{
EventSource aEventSource = new EventSource();
// 註冊事件處理函式,類似 this.Click += new EventHandler(Button1_OnClick);
aEventSource.Say += new EventHandler(MyEvent);
// 此處為示範由程式主動觸發事件
// 在 GUI 應用中,通常由使用者操作觸發,OS 發送訊息再呼叫處理函式
aEventSource.TriggerEvent();
}
// 事件處理函式
public static void MyEvent(string str)
{
System.Console.WriteLine(str);
}
}
關鍵點:
event 關鍵字限制委派只能在類別內部觸發,外部只能 +=/-= 註冊/移除。!= null 避免無訂閱者時拋出例外。