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);

标签: c#

评论已关闭