委託與事件的關係

2022-01-16 08:35:06 字數 682 閱讀 3533

說道"委託"這個詞我們肯定都不會陌生吧,生活中"委託"就是請別人幫我們做事。

程式中也是如此,委託機制是.net中特有的,我們可以將方法作為引數傳給委託,讓委託幫我呼叫執行方法。

先來看看委託是如何定義的:

[訪問修飾符] delegate 返回值 委託名([引數]);

委託類似於c/c++中的函式指標,但是它們又有一些區別,並不是完全等價的。

說到指標,很多人肯定又暈,指標其實就是位址,而函式指標就是函式的位址或者說函式的入口,這樣說相信我們會好理解一點。

委託是一種型別,可以儲存多個方法的列表,而函式指標只能儲存乙個函式的指標,除非使用指標陣列才可以儲存多個函式的指標。

好了,言歸正傳。下面我們來看看事件是什麼玩意?

我們定義乙個事件是使用event關鍵字,其實事件就是委託型別變數,這是不是出乎很多人的意料?

event關鍵字主要是為了限制我們在外部呼叫委託,只允許在類內部呼叫委託,並且只能通過+=和-=來追加移除方法。

下面我們定義乙個事件:

public event void mydelegate dele;

然後我們通過reflecator反編譯可以看到:

事件的本質其實就是乙個私有委託和兩個方法(add和remove方法)

有點類似欄位和屬性,事件就是在類內部對委託進行了封裝。

所以說事件其實乙個閹割後的委託。

事件的前世今生,委託和事件關係

假設沒有事件,我們能不能通過委託實現事件的功能?事實上是可以的。下面我們一步一步剖析!先舉個例子 有這麼乙個場景,有乙個氣球 相當於事件 訊息的傳送者 氣球 相當於觸發事件 小孩子聽到氣球 會嚇哭 小孩子相當於乙個事件的訂閱者 我們不適用事件,使用委託來完成這個程式。第一步 定義乙個全域性的委託型別...

事件的前世今生,委託和事件關係

假設沒有事件,我們能不能通過委託實現事件的功能?事實上是可以的。下面我們一步一步剖析!先舉個例子 有這麼乙個場景,有乙個氣球 相當於事件 訊息的傳送者 氣球 相當於觸發事件 小孩子聽到氣球 會嚇哭 小孩子相當於乙個事件的訂閱者 我們不適用事件,使用委託來完成這個程式。第一步 定義乙個全域性的委託型別...

委託與事件

1.建立乙個類,分別建立加 減 乘 除四個方法,通過委託和事件,實現 輸入兩個計算數,完成所有的四個方法的呼叫,計算出結果顯示。建立乙個警察 policeman 類,乙個小偷 thief 類,例項化兩個類的物件,當policeman類中警笛鳴響 alarm 方法執行時,觸發小偷逃跑 runaway ...