委托:将一个方法作为参数带入到另外一个方法中。
Func<>
定义:Func是有返回值的泛型委托(封装方法),可以传入0-16个参数。
特点:可传参、有返回值、封装方法。
用法详解:Func返回值是int的委托,没有参数;Func返回值是string,没有参数;Func<string,int>返回值是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>中有两个参数(参数: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();
}
}