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...