傳統強型別訂閱
Customer c = new Customer();
c.OnChange += new EventHandler(c_OnChange); // 編譯期綁定
c.Change();
static void c_OnChange(object sender, EventArgs e) {
Console.WriteLine("事件被觸發了");
}
class Customer {
public event EventHandler OnChange;
public void Change() { if (OnChange != null) OnChange(this, null); }
}
反射動態訂閱
Customer c = new Customer();
// 取得事件資訊(包含非公開、實例、公開)
EventInfo evt = c.GetType().GetEvent("OnChange",
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
// 動態加入處理器
evt.AddEventHandler(c, new EventHandler(c_OnChange));
c.Change(); // 正常觸發
關鍵差異與應用場景