// 声明一个委托
// 委托就是一个类型
// Add: 委托类型的变量
// 类型: double(int, int)
// 是一个方法类型,返回值类型是double,参数类型是(int, int)
delegate double Add(int a, int b);
class Program {
public static void Main(string[] args) {
// 将Add类型的变量a指向Plus方法
Add a = new Add(Plus);
// 现在 a 就是 Plus 方法
// 现在,将Plus和Minus方法都绑定给a,双重委托,a即表示Plus,又表示Minus方法
//可以通过一次调用执行多个方法
a += Minus;
//打印最后一个方法的结果
System.Console.WriteLine(a(10, 20));
}
public static double Plus(int a, int b) {
System.Console.WriteLine("Plus");
return a + b;
}
public static double Minus(int a, int b) {
System.Console.WriteLine("Minus");
return a - b;
}
}
//Lambda表达式主要用于事件回调
using System;
// 委托
delegate int Method(int a, int b);
delegate string Method2(string s0, string s1);
class Program {
public static void Main(string[] args) {
Method m = Add;
// 匿名函数(所谓的匿名,就是省略方法名)
m = delegate (int x, int y) {
return x + y;
};
// => 是Lambda运算符,读作 goes to
// 是作为参数列表和方法体的分隔
m = (int x, int y) => {
return x + y;
};
// 在上述Lambda表达式中,如果方法体中只有一句返回语句,那么可以这样简化
m = (int x, int y) => x + y;
// 上述式子还可以简化
// int(int, int)
m = (x, y) => x - y;
// 上述式子,如果形参列表只有一个参数, 那么小括号可以不写
Console.WriteLine(m(10, 20)); // ?
Method2 m2 = (x, y) => x + y;
m2("hello ", "world!");
}
public static int Add(int x, int y) {
return x + y;
}
}