我們在使用委托的過程中,除了為每個參數和返回類型定義一個委托之外,也就是說為每一個方法(作為參數的方法)定義一個委托,我們還可以使用Action<T>和Func<T>委托。
泛型Action<T>委托表示引用一個void返回類型的方法。Action<T>委托類存在不同的變體,可以傳遞至多16種不同的參數類型,沒有泛型參數的Action類可以調用沒有參數的方法。例如:Action<in T1>調用帶一個參數的方法,Action<in T1,in T2>調用帶兩個參數的方法等
Func<T>的用法和Action<T>用法類似,但是Func<T>表示引用一個帶返回類型的方法,Func<T>也存在不同的變體,至多可以傳遞16個參數類型和1個返回類型,例如:Func<in T1,out Resout>表示帶一個參數的方法,Func<in T1,in T2,out Resout>表示調用帶兩個參數的方法。
下面就直接給一個Action<T>和Func<T>的例子
using System; namespace DelegateFuncAction { class Program { static void Main(string[] args) { Func<double, double,double> DoAddtion = calculate.addtion; double result = DoAddtion(20, 30); Console.WriteLine("Func帶返回參數委托做加法結果為:{0}",DoAddtion(10,20)); calculate c=new calculate(); Action<double, double> DoSubstraction = c.substraction; DoSubstraction(90, 20); } } class calculate { public static double addtion(double x, double y) { return x + y; } public void substraction(double x, double y) { Console.WriteLine("Action不帶返回參數委托做減法結果為:{0}",x-y); } } }
輸出結果:
Func帶返回參數做加法結果為:30 Action不帶返回參數委托做減法結果為:70