Action<T>和Func<T>委托事例

Action<T>和Func<T>委托事例

using System;

//除了为每个参数和返回类型定义一个新委托类型之外,还可以使用Action<T>和Func<T>委托。
//泛型Action<T>委托表示引用一个void返回类型的方法。这个委托类存在不同的变体,可以传递至多16种不同的参数类型。
//没有泛型参数的Action类可以调用没有参数的方法。
//Action<in T>调用带一个参数的方法,Action<in T1,in T2>调用带两个参数的方法,Action<in T1,in T2,in T3,in T4,in T5,in T6,in T7,in T8>
//调用带8个参数的方法。

//Func<T>委托可以以类似的方式使用。Func<T>允许调用带返回类型的方法。与Action<T>类似,Func<T>也定义了不同的变体,
//至多也可以传递16个参数类型和一个返回类型。Func<out TResult>委托类型可以调用带返回类型且无参数的方法,Func<in T,out TResult>
//调用带一个参数的方法,Func<in T1,in T2,in T3,in T4,out TResult>调用4个参数的方法。
namespace Action和Func泛型委托的事例
{
    class Program
    {
        static void Main(string[] args)
        {
            //泛型委托数组
            Func<double ,double>[] operations = {
                MathOperations.MultiplyByTwo,
                MathOperations.Squre

            };
            for(int i = 0;i<operations.Length;i++){
                System.Console.WriteLine($"Using operations[{i}]");
                ProcessAndDisplayNumber(operations[i],2.0);
                ProcessAndDisplayNumber(operations[i],7.94);
                ProcessAndDisplayNumber(operations[i],1.414);
                System.Console.WriteLine();

            }
            //Console.WriteLine("Hello World!");
        }

        //使用该委托,并将ProcessAndDisplayNumber()方法作为参数:
     static void ProcessAndDisplayNumber(Func<double,double> action,double value){
         double result = action(value);
         System.Console.WriteLine($"Value is {value},result of operation is {result}");

     }
    }

    

    //声明下需要调用的方法
    class MathOperations{
        public static double MultiplyByTwo(double value)=>value*2;
        public static double Squre(double value)=>value*value;
    }
}

 

posted @ 2019-11-29 18:30  singhwong  阅读(167)  评论(0编辑  收藏  举报