忽然想起delegate委託是支持+= 和-=操做的,而後研究一下究竟這個是怎麼作到的,好模仿一下。一開始覺得是+=的運算符重載,可是在類庫參考中並無這個運算符重載,只有!= 和==運算符重載。有點納悶,最終發現,原來+=這些直接就是語法層面的實現,只是針對delegate纔有的福利,因此也不存在模仿的可能性了。程序員
順便就總結一下event事件和delegate委託的區別。這個區別有點相似字段和屬性的不一樣。好比接口能夠有屬性,可是不能有字段。爲何?由於屬性本質是方法,對字段進行了包裝,這種包裝有一點語法上的支持,在不一樣上下文下,會有不一樣的解釋意義。函數
委託本質上是函數指針,是一個存儲函數地址的變量,它很靈活,強大,這和字段同樣,若是人們想要限制外部環境直接訪問和控制委託,那麼就能夠經過event來達到這個目的。spa
固然,事件對委託的包裝,添加了一層語義,那就是爲了實現「事件模式」,若是你不想實現事件模式,那麼就應該用普通函數來自定義這層包裝。通常來講,事件的套路很適合程序員的須要。指針
delegate | event |
賦值=接口 取值=事件 添加回調函數+=ci 移除回調函數-=回調函數 調用()event |
添加處理函數+=table 移除處理函數-= (若是沒有單獨定義事件的委託,在內部,事件能夠等同委託來用) |
由於委託能夠綁定多個函數,那麼它的返回值到底是哪一個?返回值是它綁定的最後一個回調函數。