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

C# 事件與索引子:從觀察者模式到類陣列化存取

     編輯:關於C#

事件:類別之間的通訊橋樑

事件讓類別能在特定動作發生時「發出通知」,其他物件可訂閱事件並執行回應邏輯。C# 內建事件模型基於委派,支援多播,是實作觀察者模式的標準方式。

事件宣告與觸發流程

public delegate void EventHandler(object sender, EventArgs e);

public class Button {
    public event EventHandler Click; // 宣告事件
    protected virtual void OnClick(EventArgs e) {
        Click?.Invoke(this, e); // 安全觸發
    }
    public void Reset() => Click = null; // 清除訂閱
}

索引子:讓物件像陣列一樣被索引

索引子讓類別實例支援 obj[index] 語法,內部可封裝集合、資料庫查詢或運算邏輯。宣告語法類似屬性,但帶參數清單。

DNS 解析範例:依域名索引取得 IP 位址

using System;
using System.Net;

class ResolveDNS {
    IPAddress[] _ips;
    public void Resolve(string host) {
        _ips = Dns.GetHostEntry(host).AddressList;
    }
    public IPAddress this[int index] => _ips[index]; // 唯讀索引子
    public int Count => _ips.Length;
}

// 使用方式
var resolver = new ResolveDNS();
resolver.Resolve("www.example.com");
for (int i = 0; i < resolver.Count; i++)
    Console.WriteLine(resolver[i]);

事件與索引子的進階議題

  • 事件存取器:自訂 add/remove 邏輯,適用於大量事件需節省記憶體時(如 WinForms Control)。
  • 靜態事件:屬於類別而非實例,不可使用 this,也不支援 virtual/abstract/override。
  • 索引子多載:可定義多個參數型別不同的索引子(如 this[string key]、this[int x, int y])。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved