用lambda表达式声明委托

首先来分享一段代码:

Func<int, int, int> addMethod = (int x, int y) => (x + y);

熟悉的人肯定知道这句话是什么意思,可是不熟悉的人指定一看就头大,这就是会者不难,难者不会。

我来介绍一下上面那句话:

首先介绍赋值号(=)左面Func<int, int, int>,它相当于声明了一个委托private int deletegate TestAdd(int x ,int y ),前两个参数是相应方法的参数类型,最后一个为方法的返回类型。

那么上面的一句话就可以用委托的形式来实现:

private intdeletegate TestAdd(int x, int b );//定义一个委托,返回值为string类型

private int Add(int x,int y)

{

  return x + y;

}

TestAdd t=new TestAdd(Add);

t(4,8);

小结:我理解这句话就是简化了委托的声明,以及委托的实例化和调用。

但是我觉得和介绍的“Limbda表达式实际上就是一个方法,只不过该方法是匿名方法(即没有名称的方法)”有点区别,感觉可以直接用addMethod当方法用,比如如下:

      int x1 = 5, y1 = 8;
MessageBox.Show("x1+y1=" + addMethod(x1, y1));

其实我理解是这样的,当上面的声明都是变量的时候和方法的声明没区别,但是让代码的可读性变难了,但是代码量减少了。

但是从委托的角度上看就和“匿名方法”挂钩了,而且简单了很多,Func<int, int, int>声明了一个委托,而且委托是匿名的,直接来一个委托的实例化,实例化addMethod,且右面的方法也是匿名的。

委托和方法的区别我在这里就不多说了,总之声明出来后就是一个委托实例,其中用到了匿名方法和匿名委托。

上一篇:MySQL数据库高可用集群搭建-PXC集群部署


下一篇:C#-多态(十二)