我们在使用委托的过程中,除了为每个参数和返回类型定义一个委托之外,也就是说为每一个方法(作为参数的方法)定义一个委托,我们还可以使用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>的例子

 

 
  
  1. using System; 
  2. namespace DelegateFuncAction 
  3.     class Program 
  4.     { 
  5.         static void Main(string[] args) 
  6.         { 
  7.             Func<doubledouble,double> DoAddtion = calculate.addtion; 
  8.             double result = DoAddtion(20, 30); 
  9.             Console.WriteLine("Func带返回参数委托做加法结果为:{0}",DoAddtion(10,20)); 
  10.             calculate c=new calculate(); 
  11.             Action<doubledouble> DoSubstraction = c.substraction; 
  12.             DoSubstraction(90, 20); 
  13.         } 
  14.     } 
  15.     class calculate 
  16.     { 
  17.         public static double addtion(double x, double y) 
  18.         { 
  19.             return x + y; 
  20.         } 
  21.         public void substraction(double x, double y) 
  22.         { 
  23.             Console.WriteLine("Action不带返回参数委托做减法结果为:{0}",x-y); 
  24.         } 
  25.     } 

 

输出结果:

?
Func带返回参数做加法结果为:30
Action不带返回参数委托做减法结果为:70