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

C# 委托與事件詳解(七)

     編輯:關於C語言

委托變量 delegate1 與普通 string 變量無異。但封裝原則要求:該公開則公開,該私有則私有。

若聲明 private:客戶端不可見,無法註冊方法,失去意義。
若聲明 public:客戶端可任意賦值 (=) 破壞封裝,甚至覆蓋已註冊方法。
語法不一致:首次註冊用 = (賦值),後續用 += (組合),語義卻相同。

若 delegate1 是 string,自然會用屬性封裝。Event 由此登場:它封裝委托變量,使得:

  • 類內部:無論聲明 public/protected,實際為 private
  • 類外部:只能用 +=/-=,存取級別同事件聲明修飾符

改寫 GreetingManager:

public class GreetingManager {
    public event GreetingDelegate MakeGreet;
    public void GreetPeople(string name) { MakeGreet(name); }
}

唯一差別多了 event 關鍵字。客戶端調用:

static void Main() {
    GreetingManager gm = new GreetingManager();
    gm.MakeGreet = EnglishGreeting; // 編譯錯誤:事件只能出現在 +=/-= 左側
    gm.MakeGreet += ChineseGreeting;
    gm.GreetPeople("Jimmy Zhang");
}

用 Reflector 檢視發現:public event 編譯為 private 欄位,故外部不可直接賦值。

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