C#委託和事件的使用示例

一、委託

使用委託時要先實例化,和類一樣,使用new關鍵字產生委託的新實例,然後將一個或者多個與委託簽名匹配的方法與委託實例關聯。隨後調用委託時,就會調用所有與委託實例關聯的方法。

與委託關聯可以是任何類或者結構中的方法,可以是靜態方法,只要是可以訪問的方法都可以。

1.創建一個委託類型使用關鍵字delegate(委託)

一、委託

使用委託時要先實例化,和類一樣,使用new關鍵字產生委託的新實例,然後將一個或者多個與委託簽名匹配的方法與委託實例關聯。隨後調用委託時,就會調用所有與委託實例關聯的方法。

與委託關聯可以是任何類或者結構中的方法,可以是靜態方法,只要是可以訪問的方法都可以。

1.創建一個委託類型使用關鍵字delegate(委託)

輸出如下:

2.一個委託實例,可關聯多個方法:

其中D4 = TestMethod1;用“=”而不能“+=”,是因爲之前D4未實例化,可以使用下面的代碼:

MyDelegate D4 = new MyDelegate(TestMethod1);
D4 += TestMethod2;
D4 += TestMethod3;

但是如果使用以下方式,會出現編譯錯誤: “MyDelegate”方法沒有采用“0”個參數的重載:

MyDelegate D4 = new MyDelegate();
D4 += TestMethod1;

詳情見:http://www.tracefact.net/tech/009.html

3.移除一個委託實例中的方法  使用“-=”:

二、事件

事件自身就是委託類型,由於委託可以綁定和調用多個方法,所以會爲事件的處理帶來方便。類型只需要對外公開事件,就可以與外部的其它地方關聯,從而實現事件訂閱

要在類中聲明事件(只不過不管是不是聲明爲public,它總是被聲明爲private。另外,它還有兩個方法,分別是add_MakeGreet和remove_MakeGreet,這兩個方法分

別用於註冊委託類型的方法和取消註冊。實際上也就是: “+= ”對應 add_MakeGreet,“-=”對應remove_MakeGreet。而這兩個方法的訪問限制取決於聲明事件時的訪問限制符。)

1.首先要定義用來作爲事件封裝類型的委託,用event關鍵字來聲明事件。

2.爲了允許派生類重寫引發事件的代碼,通常會在類中聲明一個受保護的方法,習慣上命名On<事件名>

3.EventArgs類參數

由於不同的事件要傳遞的參數不同,更多時候是從EventArgs類派生的子類的實例,顯然EventHandler委託時不能滿足各種情況的。

如果針對不同的事件也定義一個對應的委託,數量一旦多起來,不好管理,爲了解決這個問題,.NET類庫提供了一個帶有泛型參數的事件

處理委託:

public delegate void EventHandler<TEventArgs>(object sender,TEventArgs e);   TEventArgs 是一個泛型參數

 

轉自:https://www.cnblogs.com/hjxzjp/p/7667536.html

轉自:https://www.cnblogs.com/vickylinj/p/10922139.html

深入理解參照:http://www.tracefact.net/tech/009.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章