突然想起delegate委托是支持+= 和-=操作的,然後研究一下究竟這個是怎麼做到的,好模仿一下。一開始以為是+=的運算符重載,但是在類庫參考中並沒有這個運算符重載,只有!= 和==運算符重載。有點納悶,最終發現,原來+=這些直接就是語法層面的實現,只是針對delegate才有的福利,所以也不存在... ...
突然想起delegate委托是支持+= 和-=操作的,然後研究一下究竟這個是怎麼做到的,好模仿一下。一開始以為是+=的運算符重載,但是在類庫參考中並沒有這個運算符重載,只有!= 和==運算符重載。有點納悶,最終發現,原來+=這些直接就是語法層面的實現,只是針對delegate才有的福利,所以也不存在模仿的可能性了。
順便就總結一下event事件和delegate委托的區別。這個區別有點類似欄位和屬性的不同。比如介面可以有屬性,但是不能有欄位。為什麼?因為屬性本質是方法,對欄位進行了包裝,這種包裝有一點語法上的支持,在不同上下文下,會有不同的解釋意義。
委托本質上是函數指針,是一個存儲函數地址的變數,它很靈活,強大,這和欄位一樣,如果人們想要限制外部環境直接訪問和控制委托,那麼就可以通過event來達到這個目的。
當然,事件對委托的包裝,添加了一層語義,那就是為了實現“事件模式”,如果你不想實現事件模式,那麼就應該用普通函數來自定義這層包裝。一般來說,事件的套路很適合程式員的需要。
delegate | event |
賦值= 取值= 添加回調函數+= 移除回調函數-= 調用() |
添加處理函數+= 移除處理函數-= (如果沒有單獨定義事件的委托,在內部,事件可以等同委托來用) |
因為委托可以綁定多個函數,那麼它的返回值究竟是哪個?返回值是它綁定的最後一個回調函數。