首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 事件深度解析(二):事件存取限制、事件屬性實作與自訂儲存機制

     編輯:關於C語言

事件成員的存取限制

類別外部僅能對事件使用 += / -= 運算子,結果為 void。此規則禁止外部代碼直接檢查或修改事件底層委派欄位。

事件處理器訂閱範例

public class LoginDialog : Form
{
    Button OkButton, CancelButton;
    public LoginDialog()
    {
        OkButton = new Button(...);
        OkButton.Click += new EventHandler(OkButtonClick);
        CancelButton = new Button(...);
        CancelButton.Click += new EventHandler(CancelButtonClick);
    }
    void OkButtonClick(object sender, Event e) { /* 處理 */ }
    void CancelButtonClick(object sender, Event e) { /* 處理 */ }
}

事件屬性取代事件欄位:自訂儲存機制

大量事件若各佔一欄位會浪費記憶體。可宣告事件屬性,內部以鍵值對存儲委派:

class Control : Component
{
    static readonly object mouseDownEventKey = new object();
    static readonly object mouseUpEventKey = new object();

    protected Delegate GetEventHandler(object key) { ... }
    protected void SetEventHandler(object key, Delegate handler) { ... }

    public event MouseEventHandler MouseDown
    {
        get { return (MouseEventHandler)GetEventHandler(mouseDownEventKey); }
        set { SetEventHandler(mouseDownEventKey, value); }
    }
    public event MouseEventHandler MouseUp
    {
        get { return (MouseEventHandler)GetEventHandler(mouseUpEventKey); }
        set { SetEventHandler(mouseUpEventKey, value); }
    }
}

底層儲存可設計為「無處理器不佔空間」,達到空間與時間的平衡。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved