event 和delegate的分別


忽然想起delegate委託是支持+= 和-=操做的,而後研究一下究竟這個是怎麼作到的,好模仿一下。一開始覺得是+=的運算符重載,可是在類庫參考中並無這個運算符重載,只有!= 和==運算符重載。有點納悶,最終發現,原來+=這些直接就是語法層面的實現,只是針對delegate纔有的福利,因此也不存在模仿的可能性了。程序員

順便就總結一下event事件和delegate委託的區別。這個區別有點相似字段和屬性的不一樣。好比接口能夠有屬性,可是不能有字段。爲何?由於屬性本質是方法,對字段進行了包裝,這種包裝有一點語法上的支持,在不一樣上下文下,會有不一樣的解釋意義。函數

委託本質上是函數指針,是一個存儲函數地址的變量,它很靈活,強大,這和字段同樣,若是人們想要限制外部環境直接訪問和控制委託,那麼就能夠經過event來達到這個目的。spa

固然,事件對委託的包裝,添加了一層語義,那就是爲了實現「事件模式」,若是你不想實現事件模式,那麼就應該用普通函數來自定義這層包裝。通常來講,事件的套路很適合程序員的須要。指針

delegate event

賦值=接口

取值=事件

添加回調函數+=ci

移除回調函數-=回調函數

調用()event

添加處理函數+=table

移除處理函數-=

(若是沒有單獨定義事件的委託,在內部,事件能夠等同委託來用)


由於委託能夠綁定多個函數,那麼它的返回值到底是哪一個?返回值是它綁定的最後一個回調函數。

相關文章
相關標籤/搜索