C 委託和事件的使用示例

2021-10-13 05:36:22 字數 1869 閱讀 2217

一、委託

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

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

1.建立乙個委託型別使用關鍵字delegate(委託)

輸出如下:

2.乙個委託例項,可關聯多個方法:

其中d4 = testmethod1;用「=」而不能「+=」,是因為之前d4未例項化,可以使用下面的**:

mydelegate d4 = new mydelegate(testmethod1)

;d4 += testmethod2;

d4 += testmethod3;

但是如果使用以下方式,會出現編譯錯誤: 「mydelegate」方法沒有採用「0」個引數的過載:

mydelegate d4 = new mydelegate();

d4 += testmethod1;

3.移除乙個委託例項中的方法 使用「-=」:

二、事件

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

要在類中宣告事件(只不過不管是不是宣告為public,它總是被宣告為private。另外,它還有兩個方法,分別是add_makegreet和remove_makegreet,這兩個方法分

別用於註冊委託型別的方法和取消註冊。實際上也就是: 「+= 」對應 add_makegreet,「-=」對應remove_makegreet。而這兩個方法的訪問限制取決於宣告事件時的訪問限制符。)

1.首先要定義用來作為事件封裝型別的委託,用event關鍵字來宣告事件。

2.為了允許派生類重寫引發事件的**,通常會在類中宣告乙個受保護的方法,習慣上命名on《事件名》

3.eventargs類引數

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

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

處理委託:

public delegate void eventhandler(object sender,teventargs e); teventargs 是乙個泛型引數

**:深入理解參照:

**

C 委託和事件的使用示例

一 委託 使用委託時要先例項化,和類一樣,使用new關鍵字產生委託的新例項,然後將乙個或者多個與委託簽名匹配的方法與委託例項關聯。隨後呼叫委託時,就會呼叫所有與委託例項關聯的方法。與委託關聯可以是任何類或者結構中的方法,可以是靜態方法,只要是可以訪問的方法都可以。1.建立乙個委託型別使用關鍵字del...

委託和事件使用示例

net 的事件模型建立在委託機制之上,透徹的了解了委託才能明白的分析事件。可以說,事件是對委託的封裝,從委託的示例中可知,在客戶端可以隨意對委託進行操作,一定程度上破壞了面向的物件的封裝機制,因此事件實現了對委託的封裝。下面,通過將委託的示例進行改造,來完成乙個事件的定義過程 public clas...

事件和委託示例

1 timer的elapsed事件 using system using system.collections.generic using system.linq using system.text using system.timers namespace timer的elapsed事件 e.si...