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

C# 類別核心技術(二):索引子、事件與委派實作

     編輯:關於C語言

索引子:讓類別支援陣列式存取

索引子讓類別實例可像陣列一樣使用索引器存取元素。語法類似屬性,但使用 this 關鍵字且參數列表至少一個參數。範例:

public string this[int index] {
    get { ... }
    set { ... }
}

實際應用範例:ResolveDNS 類別解析主機名稱取得 IP 位址清單,透過索引子存取:

public class ResolveDNS {
    private IPAddress[] _ips;
    public void Resolve(string host) {
        IPHostEntry entry = Dns.GetHostEntry(host);
        _ips = entry.AddressList;
    }
    public IPAddress this[int index] {
        get { return _ips[index]; }
    }
    public int Count { get { return _ips.Length; } }
}
// 使用方式
ResolveDNS resolver = new ResolveDNS();
resolver.Resolve("www.microsoft.com");
for (int i = 0; i < resolver.Count; i++)
    Console.WriteLine(resolver[i]);

注意:索引子可多載(不同參數型別),若實作多個介面可用 InterfaceName.this 語法區分。

事件:類別與用戶端的通知機制

事件與委派關係

事件型別必須為委派型別。委派定義回調方法簽章,事件可被零或多個用戶端訂閱(+=)或取消訂閱(-=)。支援靜態與實例方法作為處理常式。

完整事件實作範例

// 定義委派型別
public delegate void EventHandler(string text);

// 事件發送者
public class EventSource {
    public event EventHandler TextOut;
    public void TriggerEvent() {
        if (TextOut != null) TextOut("Event triggered");
    }
}

// 用戶端
public class TestApp {
    public static void Main() {
        EventSource src = new EventSource();
        // 訂閱靜態方法
        src.TextOut += new EventHandler(CatchEvent);
        src.TriggerEvent();
        // 取消訂閱
        src.TextOut -= new EventHandler(CatchEvent);
        src.TriggerEvent();
        // 訂閱實例方法
        TestApp app = new TestApp();
        src.TextOut += new EventHandler(app.InstanceCatch);
        src.TriggerEvent();
    }
    public static void CatchEvent(string text) {
        Console.WriteLine(text);
    }
    public void InstanceCatch(string text) {
        Console.WriteLine("Instance " + text);
    }
}

關鍵點:

  • 觸發事件前必須檢查 != null,避免無訂閱者時拋出例外。
  • 委派鏈結:多個處理常式可串連,按訂閱順序依序呼叫。
  • 實例方法訂閱時,隱含傳遞 this 參考。

存取修飾詞與成員可見性

類別與成員支援 public、private、protected、internal、protected internal 五種存取層級,控制跨組件、跨衍生類別的可見性。合理使用存取修飾詞是封裝與資訊隱藏的關鍵。

總結

索引子提供直覺的集合存取介面,事件實現鬆耦合的通知機制,委派則是類型安全的回調基礎。三者結合讓 C# 類別能設計出豐富、靈活且符合 .NET 設計規範的 API。

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