Action、Action<T>:
①、Action委托的方法沒有參數也沒有返回值
②、Action<T>是Action的泛型實現
③、Action<T>委托類存在不同的變體,可以傳遞至多16種不同的參數類型
④、沒有泛型參數的Action類可以調用沒有參數的方法
例如:Action<in T1>調用帶一個參數的方法,Action<in T1, in T2>調用帶兩個參數的方法等
Func<T>:
①、Func<T>的用法和Action<T>用法類似,但是Func<T>表示引用一個帶返回類型的方法
②、Func<T>也存在不同的變體,至多可以傳遞16個參數類型和1個返回類型
例如:Func<in T1, out Resout>表示帶一個參數的方法,Func<in T1, in T2, out Resout>表示調用帶兩個參數的方法
Predicate<T>:
①、委托的方法有bool類型的返回值,等效於Func<T, bool>
結論:
①、Func<T, bool>是對delegate bool Predicate<T>(T obj)的簡化,
②、Predicate<T>又是對Func<T, bool>的簡化,
③、List<T>中的方法應該統一參數。
④、Delegate至少0個參數,至多32個參數,可以無返回值,也可以指定返回值類型
⑤、Func可以接受0個至16個傳入參數,必須具有返回值
⑥、Action可以接受0個至16個傳入參數,無返回值
⑦、Predicate只能接受一個傳入參數,返回值為bool類型
1 using System; 2 3 public class Program { 4 public static void Main(string[] args) { 5 Action actionNoParam = () => Console.WriteLine("無參無返回"); 6 actionNoParam(); 7 8 Action<string, string> ac; 9 ac = delegate(string s1, string s2) { WriteToConsole(s1, s2); }; 10 ac("1", "2"); 11 ac = (s1, s2) => WriteToConsole(s1, s2); 12 ac("3", "4"); 13 14 Func<double, double, double> DoAddtion = Calculate.addtion; 15 double result = DoAddtion(20, 30); 16 Console.WriteLine("Func帶返回參數委托做加法結果為:{0}", result); 17 18 Calculate c = new Calculate(); 19 Action<double, double> DoSubstraction = c.substraction; 20 DoSubstraction(90, 20); 21 } 22 23 private static void WriteToConsole(string string1, string string2){ 24 Console.WriteLine("{0}\n{1}", string1, string2); 25 } 26 } 27 28 public class Calculate { 29 public static double addtion(double x, double y) { 30 return x + y; 31 } 32 33 public void substraction(double x, double y) { 34 Console.WriteLine("Action不帶返回參數委托做減法結果為:{0}", x - y); 35 } 36 }
參考文獻:
https://www.cnblogs.com/yuzk/p/5165696.html
https://blog.csdn.net/rye_grass/article/details/66041423