Func和Action委托的区别和简单使用

Func和Action委托的区别和简单使用
1、两种委托的常见形式和区别
(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为方法的返回类型。
(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);
        }

    }

 

posted @ 2021-03-11 11:30  David0338  阅读(504)  评论(0)    收藏  举报