前言:下面几条都是根据自己开发经验和网上资料整理总结的,初学者可适当入门学习,加深印象,高手请54.
Func和Action委托的区别和简单使用
1、两种委托的常见形式和区别
(1)、Func委托有5个重载形式,区别仅在于它所指向的方法的签名的参数个数,分别如下:
Func<TResult>
Func<T,TResult>
Func<T1,T2,TResult>
Func<T1,T2,T3,TResult>
Func<T1,T2,T3,T4,TResult>
其中T,T1,..T4是委托指向的方法的参数的类型,TResult为方法的返回类型。
(2)、Action委托也有5个重载形式,分别如下:
Action
Action<T>
Action<T1,T2>
Action<T1,T2,T3>
Action<T1,T2,T3,T4>
其中T,T1,..T4是委托指向的方法的参数的类型。
从上面的委托形式我们就可以分析出来,Func和Action委托的唯一区别在于Func要有返回值, Action没有返回值。
2、简单示例代码

class Program
{
static void Main(string[] args)
{
int num = 5;
/* Func和Action委托的唯一区别在于Func要有返回值, Action没有返回值 */
FirstCalcSquare calFirst = Square;//delegate
Console.WriteLine("The square of {0} is {1}.", num, calFirst(num));
Func<int, int> funcTest = Program.Square;//Func
Console.WriteLine("The square of {0} is {1}.", num, funcTest(num));
SecondCalcSquare calSecond = GetSquere;
calSecond(num);//delegate
Action<int> actionTest = Program.GetSquere;
actionTest(num);//Action
Console.ReadLine();
}
private delegate int FirstCalcSquare(int input);
private static int Square(int input)
{
return input * input;
}
private delegate void SecondCalcSquare(int input);
private static void GetSquere(int input)
{
Console.WriteLine("The square of {0} is {1}.", input, input * input);
}
}
{
static void Main(string[] args)
{
int num = 5;
/* Func和Action委托的唯一区别在于Func要有返回值, Action没有返回值 */
FirstCalcSquare calFirst = Square;//delegate
Console.WriteLine("The square of {0} is {1}.", num, calFirst(num));
Func<int, int> funcTest = Program.Square;//Func
Console.WriteLine("The square of {0} is {1}.", num, funcTest(num));
SecondCalcSquare calSecond = GetSquere;
calSecond(num);//delegate
Action<int> actionTest = Program.GetSquere;
actionTest(num);//Action
Console.ReadLine();
}
private delegate int FirstCalcSquare(int input);
private static int Square(int input)
{
return input * input;
}
private delegate void SecondCalcSquare(int input);
private static void GetSquere(int input)
{
Console.WriteLine("The square of {0} is {1}.", input, input * input);
}
}
引自:http://www.cnblogs.com/jeffwongishandsome/archive/2010/04/08/1512556.html