C# 委托
委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用。 在实例化委托时,你可以将其实例与任何具有兼容签名和返回类型的方法相关联。 你可以通过委托实例调用方法。
委托的使用:
* 方法的签名必须和委托一致,方法签名包括参数的个数,类型和顺序
* 方法的返回值类型要和委托一致
* 定义委托
* 声明委托变量
* 实例化委托类型
* 将委托作为参数传递
Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型
Func可以接受0个至16个传入参数,必须具有返回值
Action可以接受0个至16个传入参数,无返回值
Predicate只能接受一个传入参数,返回值为bool类型
public delegate int Mydelgate(int x, int y);//定义委托 class Program { static void Main(string[] args) { student stu = new student(); Mydelgate Mydelegate1 = new Mydelgate(stu.add);//传入stu.add 方法 Mydelgate Mydelegate2 = new Mydelgate(stu.mul); //Mydel Mydelegate3 = delegate (int x, int u) { return stu.add(x, u); }; var add = Mydelegate1(2, 6);//调用委托 或Mydelegate.Invoke(2, 6); Console.WriteLine(add); //委托可以调用多个方法。 这被称为多播。 若要向委托的方法列表(调用列表)添加其他方法, //只需使用加法运算符或加法赋值运算符(“+”或“+=”)添加两个委托。 Mydelegate1 += Mydelegate2; Console.WriteLine(Mydelegate1(5, 5));//先调用mydelegete1 再调用mydelegete2 //用lambda 表达式更加简洁 Mydelgate addition = (p, x) => (p + x); Mydelgate subtraction = (p, x) => (p - x); Mydelgate multiplication = (p, x) => (p * x); Mydelgate division = (p, x) => (p / x); Console.ReadKey(); } } class student { public int add(int x, int y) { return x + y; } public int sub(int x, int y) { return x - y; } public int mul(int x, int y) { return x * y; } }
图片来源:https://www.bilibili.com/video/av18906386?from=search&seid=3181193995352669498
遍历多播委托,GetInvocationList
Delegate[] delegates = Mydelegate.GetInvocationList();
一般用多播委托都不用返回值
可参考:https://www.cnblogs.com/sunliyuan/p/6036539.html 或 https://www.cnblogs.com/liuqiang18/p/9144807.html
官方版本:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/delegates