

委托、匿名方法到lambda表达式
source link: http://www.cnblogs.com/HTLucky/p/13378164.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

在项目中我们经常会接触lambda表达式,操作简洁明了。帮我们省了不少事。面对这么神奇的一个东西,是不是也应该了解了解它的本质呢。
今天我们通过一步一步的演变揭开lambda表达式的本质
一.委托
C# 中的委托类似于 C 或 C++ 中函数的指针。委托是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。委托的本质也跟类一样,是用户自定义的类型。类的定义是通过class关键字
,而委托的定义是通过delegate来定义
class Program { static void Main(string[] args) { //声明一个AddNum类型的变量a, AddNum a = new AddNum(Add); //创建一个指向Add方法的委托对象 a(2, 3); //调用a指向的方法 Console.WriteLine(a); //打印a的类型,a(2,3)加上括号才是调用 Console.WriteLine(a(2, 3)); } //声明一个方法以便委托调用,要注意的是方法的签名要与委托声明的签名保持一致 public static int Add(int a,int b) { return a + b; } } //声明一个委托,要注意的是委托跟类是同一级别的 delegate int AddNum(int a, int b);
二.匿名方法
匿名方法,顾名思义就是没有名字的方法,通常我们调用方法就是根据方法的名字进行调用,那这匿名方法没有名字我们该如何调用嘞。别着急,我们可以通过匿名方法实现委托实例来进行调用
AddNum c = new AddNum(Add); //传统的做法,先通过创建Add方法再创建委托实例 //使用匿名方法创建委托实例 AddNum b = delegate (int m, int n) { return m + n; }; Console.WriteLine(b(6,6)); //委托的调用还是一样的
三.lambda表达式
lambda是一个匿名方法,C#中的Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”
//匿名方法声明委托 AddNum b = delegate (int m, int n){ return m + n; }; //lambda格式的匿名方法的写法 AddNum c = (int m, int n)=>{ return m + n; }; //演变一:可以省略数据类型(编译器可以根据委托类型自动推断) AddNum d = (m,n) => { return m + n; }; //演变二:当匿名方法只用一个参数,小括号也可以省略 Func<int, bool> e = i => { return true; }; //Func为内置的委托对象,最后一个参数是返回值的类型 //演变三:若委托有返回值,并且方法体只有一行代码,则大括号和return都可以省略 AddNum f = (m, n) => m + n;
Recommend
-
60
-
39
为什么要使用函数式编程函数式编程更多时候是一种编程的思维方式,是种方法论。函数式与命令式编程的区别主要在于:函数式编程是告诉代码你要做什么,而命令式编程则是告诉代码要怎么做。说白了,函数式编程是基于某种语法或调用API去进行编程。例如,我们现在需要...
-
45
本来计算这篇文章在后面需要运用的时候写的,但是既然写到表达式的扩展呢,就一起写完吧。 看到这个标题就有一种疑问,Lambda表达式本来就是表达式树,还需要怎么扩展?那就看看下面的内容...
-
59
先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号“程序新视界”,好好系列的学习一下Java8的新特性。Lambda表达式已经在新框架中普通使用了,如果你对...
-
23
Java - @wuwudeqi -
-
23
说出来怕你们不相信,刚接到物业通知,疫情防控升级了,车辆只能出不能进,每户家庭每天可指派 1 名成员上街采购生活用品。这不是谣言,截个图自证清白,出自洛阳市湖北路街道处。
-
27
委托 委托是什么? 委托是一种引用类型(其实就是一个类,继承MulticastDelegate特殊的类。),表示对具有特定参数列表和返回类型的方法的引用。 每个委托提供Invoke方法, BeginInvoke和EndInvoke异步方法...
-
17
Java8中的匿名函数(Lambda) 发表于2020年1月3日2020年1月3日 最近在二刷《...
-
7
Java函数式编程 什么是函数式编程 通过整合现有代码来产生新的功能,而不是从零开始编写所有内容,由此我们会得到更加可靠的代码,并获得更高的效率 我们可以这样理解:面向对象编程抽象数据,函数式编...
-
6
重学c#系列——委托和匿名函数[二十五] 简单介绍一下什...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK