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


一、委托

使用委托時要先實例化,和類一樣,使用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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM