C# 委托、 匿名方法 、Lambada表达式
C# 中, 委托 ---> 匿名方法 ----> Lambda表达式 三者之间是层层演化的关系。
委托
什么是委托?委托也是一种类型,委托也是一种类型,委托也是一种类型,委托类型的变量指向方法。示例:
// 声明一个带有返回值的委托类型 Dtest
delegate int Dtest(int i, int j);
// 声明一个带有返回值的方法 Sum
public int Sum(int a, int b){
return a + b;
}
// 声明一个委托变量,指向方法
Dtest devar = Sum;
// 通过委托调用一个方法
devar(1,2);
匿名方法
匿名方法,就是没有名字的方法。委托类型的变量不仅可以指向普通方法,也可以指向一个匿名方法。示例:
Func<string s,int r> f0 = delegate(string s1){
return Convert.ToInt32(s);
};
匿名方法的声明,也是使用 delegate
关键字,如上。
Lambda 表达式
Lambda 表达式由匿名方法演进而来。示例:
Func<string s,int r> f0 = s1 => Convert.ToInt32(s);
如果只有一行代码,可以省略大括号和 return
其他,Action 与 Func
通常在业务开发中,开发者不必特意声明一个委托类型。使用系统内置的泛型委托 Action 和 Func 即可。两者的区别:
Action 是没有返回值的
Func 一定是有返回值的
Action ac = ()=> Console.WriteLine("hello world"); ac();
Action<int i, int j> ac2 = (a,b)=>Console.WriteLine(a+b); ac2(6,9);
Func<int i,int j> fun = i => i * 2;
int res = fun(3);