說道"委托"這個詞我們肯定都不會陌生吧,生活中"委托"就是請別人幫我們做事。
程序中也是如此,委托機制是.Net中特有的,我們可以將方法作為參數傳給委托,讓委托幫我調用執行方法。
先來看看委托是如何定義的:
[訪問修飾符] delegate 返回值 委托名([參數]);
委托類似于C/C++中的函數指針,但是它們又有一些區別,并不是完全等價的。
說到指針,很多人肯定又暈,指針其實就是地址,而函數指針就是函數的地址或者說函數的入口,這樣說相信我們會好理解一點。
委托是一種類型,可以存儲多個方法的列表,而函數指針只能存儲一個函數的指針,除非使用指針數組才可以存儲多個函數的指針。
好了,言歸正傳。下面我們來看看事件是什么玩意?
我們定義一個事件是使用event關鍵字,其實事件就是委托類型變量,這是不是出乎很多人的意料?
event關鍵字主要是為了限制我們在外部調用委托,只允許在類內部調用委托,并且只能通過+=和-=來追加移除方法。
下面我們定義一個事件:
public event void MyDelegate dele;
然后我們通過Reflecator反編譯可以看到:
事件的本質其實就是一個私有委托和兩個方法(add和remove方法)
有點類似字段和屬性,事件就是在類內部對委托進行了封裝。
所以說事件其實一個閹割后的委托。
新聞熱點
疑難解答