事件
事件 (event) 是一種使類或對象能夠提供通知的成員。事件的聲明與字段類似,不同的是事件的聲明包 含 event 關鍵字,並且類型必須是委託類型。
在聲明事件成員的類中,事件的行爲就像委託類型的字段(前提是該事件不是抽象的並且未聲明訪問器)。該字段存儲對一個委託的引用,該委託表示已添加到該事件的事件處理程序。如果尚未添加事件 處理程序,則該字段爲 null。 List<T> 類聲明瞭一個名爲 Changed 的事件成員,它指示已將一個新項添加到列表中。Changed 事件 由 OnChanged 虛方法引發,後者先檢查該事件是否爲 null(表明沒有處理程序)。“引發一個事件” 與“調用一個由該事件表示的委託”這兩個概念完全等效,因此沒有用於引發事件的特殊語言構造。 客戶端通過事件處理程序 (event handler) 來響應事件。事件處理程序使用 += 運算符附加,使用 -= 運算 符移除。
下面的示例向 List<string> 類的 Changed 事件附加一個事件處理程序。
using System;
class Test {
static int changeCount;
static void ListChanged(object sender, EventArgs e) { changeCount++; }
static void Main() {
List<string> names = new List<string>();
names.Changed += new EventHandler(ListChanged);
names.Add("Liz");
names.Add("Martha");
names.Add("Beth");
Console.WriteLine(changeCount); // Outputs "3"
}
}
對於要求控制事件的底層存儲的高級情形,事件聲明可以顯式提供 add 和 remove 訪問器,它們在某種 程度上類似於屬性的 set 訪問器。