事件分為事件欄位宣告與事件屬性宣告。兩者皆可包含屬性集合、new 修飾詞、四種存取修飾詞組合與 static 修飾詞。事件型別必須為委派型別,且存取性不低於事件本身。
readonlyget/set 存取子,不允許 virtual/override/abstract宣告類別內部,事件成員相當於委派型別的私有欄位/屬性,可自由檢查、修改、呼叫。類別外部僅能作為 +=/-= 右運算元,用於訂閱/取消訂閱,無法直接讀寫底層委派值。
public delegate void EventHandler(object sender, Event e);
public class Button : Control
{
public event EventHandler Click;
protected void OnClick(Event e)
{
if (Click != null) Click(this, e);
}
public void Reset() { Click = null; }
}
類別內部可直接操作 Click 欄位。外部僅能:
b.Click += new EventHandler(...); // 訂閱
b.Click -= new EventHandler(...); // 取消訂閱
OnClick 檢查非 null 後呼叫委派,即「引發事件」模式。語言無特殊引發語法,即為委派呼叫。