事件讓類別能在特定動作發生時「發出通知」,其他物件可訂閱事件並執行回應邏輯。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] 語法,內部可封裝集合、資料庫查詢或運算邏輯。宣告語法類似屬性,但帶參數清單。
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])。