C 中的委託和事件

2021-09-19 02:55:14 字數 1679 閱讀 8771

委託的宣告原型是 

delegate 《函式返回型別》 《委託名》 (《函式引數》)

例如:public delegate void calculator(int i, int j);

這樣就定義了乙個委託,但是委託在.net內相當於宣告了乙個類,類如果不例項化為物件,很多功能是沒有辦法使用的,委託也是如此.

下面,直接來定義乙個委託,並且來使用委託。

namespace

_delegate

", i +j);

}private

static

void sub(int i, int j)//

宣告減法

", i -j);

}private

static

void calculator(int i, int j, calculator cal)//

calculator這個方法有三個引數,第三個compute是之前定義的委託型別。

//委託是乙個類,它定義了方法的型別,使得可以將方法當作另乙個方法的引數來進行傳遞。

/*static void main(string args)

*///

從此可以看出compute和int都是資料型別,那麼是不是可以定義兩個變數,把方法賦給變數。

static

void main(string

args)

}}

了解了委託之後,咱們來講一下事件。

c#中事件的定義和委託的宣告其實是非常的相似:

event 《委託型別》 事件名

例如: public event computer oncomputer;//定義事件,將其與**繫結

宣告了事件之後就可以例項化這個事件,註冊函式到事件中。

下面咱用乙個例子來說明:

namespace

_delegate}}

public

class compere //

主持人"

,c);

}public

static

void

main()

}}

eventcal類相當於乙個時間發布者,它定義了事件的相關資訊,包括定義了乙個事件用於計算(oncomputer),以及乙個觸發事件的函式(fireevent())

compere類則相當於乙個事件訂閱者,或者說叫做主持人吧。它定義了乙個事件處理函式(eventhandle()),並用+=將其與事件聯絡起來。從而使事件觸發的時候能夠呼叫我這個方法,其實就是計算一下a+b的值。

注意:事件處理函式的方法簽名要與**的方法簽名相同,這是非常重要的一點

namespace

_delegate}}

public

class myeventargs : eventargs//

定義事件引數類

}public

class compere //

主持人",e._a+e._b);

}public

static

void

main()

}}

這個是有引數的事件。

posted @

2016-04-04 18:17

土倫 閱讀(

...)

編輯收藏

C 中的委託和事件

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

C 中的委託和事件

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

C 中的委託和事件

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