也覆習一下事件委派的關係。
記錄一下讀後摘要:
Event 事件 -
例如按下按鈕後執行的Click事件。
在 C# 中事件無法單獨宣告, 而必須和委派一起宣告 。
事件處理函式 (Events Handler) -
事件處理函式就是一個普通的方法 (Method), 可以是 Sub 或是 Function。隨便任何一個方法 (Method) 都可以被當作事件處理函式 (當然, 傳入的參數必須正確)。
委派 (Delegate) -
如果以最白話的方式來講, 那麼你可以把這個「委派」想像是事件與事件處理函式中間的一個「跳板」。當一件事情發生時,事件處理函式(EventHander)不見得永遠就是同一個method。
假設一個Click事件,經由委派給方法A,或方法B
this.btn.Click = new EventHandler(btn_AMethodClick); this.btn.Click = new EventHandler(btn_BMethodClick); protected void btn_AMethodClick(object sender, EventArgs e) { //dosomething } protected void btn_BMethodClick(object sender, EventArgs e) { //dosomething }ps:EventHandler為C# 內預設的委派事件處理函式,預設需傳入 object與eventArgs
C#實作(原文範例):
(第一種做法) -
public delegate void myDelegate(int Code); // 宣告委派 public void ErrorHandler(int Code); // 建立事件處理函式 { // 在這裡處理事件的因應方法 } protected void Page_Load(object sender, EventArgs e) { myDelegate someDelegate = new myDelegate(ErrorHandler); // 建立委派的實體 (Instance) someDelegate(); // 假設有錯誤發生 -> 直接呼叫委派實體 }(第二種做法) -
public delegate void myDelegate(int Code); public event myDelegate ErrorFound; // 宣告事件 public void ErrorHandler(int Code); { // 在這裡處理事件的因應方法 } protected void Page_Load(object sender, EventArgs e) { ErrorFound = new myDelegate(ErrorHandler); // 透過委派在事件與事件處理函式間建立關聯 ErrorFound(1); // 假設有錯誤發生 -> 發動事件 }C# 在事件處理方面和 VB 略有不同。在以上兩個範例中, 結果也是完全相同的。不過, 和 VB 不一樣, 在 C# 中你沒有辦法完全棄委派於不顧, 因為 C# 並不會背地裡幫你把委派偷偷做好, 所以你仍然要自己宣告。
沒有留言:
張貼留言
留個話吧:)