• 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;
        }
    }
  • 相关阅读:
    桥接模式(从多个角度对实现进行分类)
    单例模式
    组合模式(解决 树形 ,局部与整体关系)
    备忘录模式
    适配器模式
    状态模式
    StartUML建模及生成java实体代码
    JPA删除接口报错 : org.hibernate.LazyInitializationException: failed to lazily initialize a collection, could not initialize proxy
    idea创建的gradle项目没有src目录怎么办?
    idea spring源码 gradle编译失败问题
  • 原文地址:https://www.cnblogs.com/singhwong/p/11959522.html
Copyright © 2020-2023  润新知