Func和Action是兩個泛型委託,爲什麼說他們有用呢?是由於這兩個自帶的委託在很多時候可以省去我們自定義委託的工作。
1.Func
該委託有5個重載形式,區別僅在於他所指向的方法的簽名的參數個數,分別如下:
- Func<TResult>
- Func<T,TResult>
- Func<T1,T2,TResult>
- unc<T1,T2,T3,TResult>
- Func<T1,T2,T3,T4,TResult>
其中T,T1,..T4是委託指向的方法的參數的類型,TResult爲方法的返回類型
舉個例子,在學習委託的時候需要用委託來寫個計算平方的小程序,您可以這樣實現:
自定義委託
首先需要聲明一個委託:CalcSquare,如果用Func這個內置的委託來實現,則可以如下:
用Func實現
可見,省去了自定義委託的那步。
您可能會說,Func的重載都是需要有返回值的,但是如果我的方法不需要返回值呢?OK,這就該輪到Action出場了。
2.Action
同樣,Action也有以下幾種重載形式:
- Action
- Action<T>
- Action<T1,T2>
- Action<T1,T2,T3>
- Action<T1,T2,T3,T4>
稍稍改下上面的例子:
自定義委託
同樣的您需要先聲明一個委託。
用Action實現
總結:Func和Action是兩個比較有用的委託,能解決我們的很多需求。當然,有時候如果您覺得給委託起個容易理解的名字很重要,也可以去自定義委託,畢竟工作量也不大,是吧。
在4.0這兩個委託又有了變化,現在可支持達16個參數!