委托(Func、Action、Delegate)

委托:将一个方法作为参数带入到另外一个方法中。
Func<>
定义:Func是有返回值的泛型委托(封装方法),可以传入0-16个参数。
特点:可传参、有返回值、封装方法。
用法详解:Func返回值是int的委托,没有参数;Func返回值是string,没有参数;Func返回值是int,传入参数是string。由此可以看出Func<>中放的最后一个类型是Func委托的返回值,Func<>最后一个类型前面所有的类型(无论有几个)都是Func的传入参数。
实例:

 public class Program9
    {
        public static string Get(Func<string, string, string> func, string x, string y)
        {
            return func(x, y);
        }
        static void Main(string[] args)

        {
            //将一个方法当作参数传到另一个方法中(委托的本质)
            //var con = Get(Temp, "你好", "世界");
            
            //匿名委托
            var content= Get((a, b) => { return ($"{a}_{b}"); }, "你好", "世界");
            Console.WriteLine(content);
            Console.ReadLine();
        }
        
        //static string Temp(string a,string b) {
        //    return ($"{a}_{b}");
        //}
    }
    

Action<>
定义:Action是无返回值的泛型委托(封装方法)。可以传入0-16个参数。
特点:可传参、无返回值、封装方法。
用法详解:Action中有两个参数(参数:string、int)无返回值;Action<>表示无参无返回值的委托方法。
实例:

 public class Program11
    {
        public static void Get(Action<string>action,string x)
        {
            action(x);
        }

        static void Main(string[] args)
        {
            
            Get(x=> Console.WriteLine(x),"中国");
            Console.ReadLine();
        }
    }

Delegate
定义:delegate声明委托就必须使用关键字“delegate”,委托是先声明,后实例化。至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型。委托是一个类,所以他的实例化跟类的实例化一样,只是他总是接受一个将委托方法作为参数的构造函数
特点:可传参、可以无返回值,也可以指定返回值类型、
用法详解:先声明一个有返回值委托 public delegate decimal delegates(int x, int y);表示有两个int类型的参数,并且返回值类型是decimal。声明一个无返回值委托public delegate void delegates(string x); 表示有一个string类型的参数,并且没有返回值。
实例:

public class Program12
    {
       public delegate string Delegates(string x);
       
        static void Main(string[] args)
        {
            Delegates del = (str) => { return ($"{str}");  };
            Console.WriteLine(del("哈喽"));
            Console.WriteLine();
            Console.ReadLine();
        }
    }

你可能感兴趣的:(原创,c#,delegate)