2012-11-05 13 views

回答

2

嗯......

Action<T> is almost the same as delegate void (T t) 
and 
Func<T> is almost the same as delegate T() 

Action和Func鍵(lambda表達式和)只是 '語法糖' 和使用委託便利。

所以這只是一個偏好問題。

+0

謝謝你分享 –

+0

@amitkohan是的,_almost_相同。有一點需要注意的是'Action '的衝突。如果不需要反變換,請編寫您自己的委託類型,不要使用反變換。看到我對Servy的回答的評論。 –

2

這完全是一個偏好問題,但我認爲沒有理由永遠定義自己的委託,如果其中一個重載的Action或Func將工作。如果你有一個ref/out/params參數,可選參數或者其他一些邊緣情況,你別無選擇,只能自己定義。

+0

其他:從.NET 4.0開始,'Action '在'T'中是**反轉**。但與此同時,委託組合(「添加」兩個委託對象)不能與反變換一起使用(Lippert的話:[所有搞砸](http://stackoverflow.com/a/2307942/1336654))。所以假設你做了一個公共事件Action ItHappened;'。然後由於逆變,一個用戶可以在'ItHappened'上添加'Action ',另一個用戶'Action ',第三個'Action '。這在運行時拋出!所以使用用戶定義類型的一個理由是**不**具有相反性。 –

+0

雖然使用Action/Func的生活要容易得多,但自定義代表可以爲您提供更好的類型安全性(正確性)。最後還有一個折衷。另一個好處是更好(更有意義)的參數名稱和IDE的文檔支持。 – nawfal

相關問題