C 中的委託和事件

2021-07-29 18:45:38 字數 1665 閱讀 2903

1 委託

委託是定址方法的.net版本。它在功能上與c++中的函式指標類似,但是函式指標不是型別安全的,因為無法判斷這個指標實際上是指向什麼,引數和返回型別也不知道。而委託則是型別安全的類,它定義了返回型別和引數的型別。委託類既可以引用乙個方法,也可以引用多個方法。

我們用書上的乙個例子來看如何使用委託。

先是定義乙個類mathoperations,它有兩個靜態方法,對double型別的值執行兩個操作。

using system;

namespace learndelegate

public static double multiplybytwo(double value)

public static double square(double value)}}

然後使用委託呼叫這些方法。

using system;

namespace learndelegate

; for(int i=0;i

執行結果如下:

2 事件

事件基於委託,為委託提供了一種發布/訂閱機制。

2.1 事件發布程式

從cardealer類開始,它基於事件提供乙個訂閱。cardealer類用event關鍵字定義了型別為eventhandler的newinfo事件。在newcar()中,通過呼叫raisenewcarinfo方法觸發newcarinfo事件。這個方法實現了檢查委託是否為空,如果不為空,就引發事件。

using system;

namespace learnevent

public string car

} public class cardealer

", car);

raisenewcarinfo(car);

} protected virtual void raisenewcarinfo(string car)}}}

2.2 事件偵聽器consumer類用作事件偵聽器。這個類訂閱了cardealer類的事件,並且定義了newcarishere方法,該方法滿足eventhandler委託的要求,引數型別是object和carinfoeventargs。

using system;

namespace learnevent

public void newcarishere(object sender, carinfoeventargs e)

: car is new",name,e.car);

} }}

3 事件的使用現在來連線事件發布程式和訂閱器。

using system;

namespace learnevent

}}

執行結果如下:

C 中的委託和事件

委託類似於c 中的函式指標,c 中的委託申明如下 delegate void mydelegate 只要該委託執行的方法與委託申明的簽名一致,就能呼叫委託來執行該方法,例如在本例中,有個方法為 void method 那麼就可以如下呼叫 mydelegate delegate new mydeleg...

C 中的委託和事件

委託 和 事件在 net framework中的應用非常廣泛,然而,較好地理解委託和事件對很多接觸c 時間不長的人來說並不容易。它們就像是一道檻兒,過了這個檻的人,覺得真是太容易了,而沒有過去的人每次見到委託和事件就覺得心裡憋得慌,渾身不自在。本文中,我將通過兩個範例由淺入深地講述什麼是委託 為什麼...

C 中的委託和事件

較好地理解委託和事件對很多接觸c 時間不長的人來說並不容易。它們就像是一道檻兒,過了這個檻的人,覺得真是太容易了,下面的例子如果能很好的理解了,那麼基本的委託和事件就基本有所了解了!namespace 委託和事件 方法三委託的定義 public delegate void greetdelegate...