當事件數量大、儲存開銷高時,自定義存取器將處理器存入私有鍵值對映射而非個別欄位。
add:訂閱時執行,參數 value 為處理器。remove:取消時執行,參數 value 為處理器。隱藏參數 value,區域變數不可命名為 value。
class Control : Component {
static readonly object MouseDownKey = new object();
static readonly object MouseUpKey = new object();
protected Delegate GetHandler(object key) { ... }
protected void AddHandler(object key, Delegate h) { ... }
protected void RemoveHandler(object key, Delegate h) { ... }
public event MouseEventHandler MouseDown {
add { AddHandler(MouseDownKey, value); }
remove { RemoveHandler(MouseDownKey, value); }
}
public event MouseEventHandler MouseUp {
add { AddHandler(MouseUpKey, value); }
remove { RemoveHandler(MouseUpKey, value); }
}
}
未訂閱的事件零記憶體開銷,只有實際訂閱時才在映射表建立條目。