首先来分享一段代码:
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,且右面的方法也是匿名的。
委托和方法的区别我在这里就不多说了,总之声明出来后就是一个委托实例,其中用到了匿名方法和匿名委托。