緣起:spa
以前一直很糾結C#中(delegate、event、Action、Func)的用法,這麼多方法,感受每次使用的時候好像都沒啥區別,老感受微軟有畫蛇添足之嫌,不過今天花了點時間好好研究了下,才發現他們實質上的區別。對象
解惑:繼承
我發現,這四種類型中無論哪一種,其實都屬於委託,只是展示的形式不一樣而已,不管哪一種,其實均可以採用delegate實現,爲何會衍生出其餘三種形式,我猜是爲了方便開發者使用,由於咱們會發現定義一個delegate其實仍是蠻費勁的,至少會比其餘三種多一條定義語句,使用起來也不方便,強迫症的我難以接受。事件
另外,delegate是很寬泛的,格式內容都不受限,俗話說沒有規矩不成方圓,若是一人過於隨意,那麼他所作的事也規範不到哪去,這就會致使後期的維護很費勁,所以,建議用後面三種。開發
區別:文檔
delegate:須要預先使用delegate關鍵詞定義好委託對象才能使用,參數任意、返回值任意io
event:無需定義委託,直接使用event關鍵詞來定義好便可,參數限定爲兩個,第一個object類型的sender(通常傳事件源),第二個繼承EventArgs的泛型參數(事件參數),返回值任意event
Action:無需任何定義,直接把它當作一種類型來使用便可,通常做爲方法參數,進行回調操做,例如導入進度回調通知,只有一個泛型參數,無返回值。泛型
Func:無需任何定義,和Action相似,只是它具備返回值object
結語:
以上爲我的理解,對於初學者具備必定參考價值,想要深刻請官網看文檔。