内容简介:在项目中我们经常会接触lambda表达式,操作简洁明了。帮我们省了不少事。面对这么神奇的一个东西,是不是也应该了解了解它的本质呢。今天我们通过一步一步的演变揭开lambda表达式的本质一.委托
在项目中我们经常会接触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;
以上所述就是小编给大家介绍的《委托、匿名方法到lambda表达式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- js事件委托总结
- JQuery7:事件委托
- Kotlin Vocabulary:Kotlin 委托代理
- 通过发布订阅模式实现的事件委托
- BeetleX之XRPC远程委托调用
- javascript – Angular:委托模式.在ngFor中优化处理程序的方法
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
高质量程序设计艺术
斯皮内利斯 / 韩东海 / 人民邮电出版社 / 2008-1 / 55.00元
在本书中,作者回归技术层面。从Apache web server、BSD版本的Unix system、ArgoUMl、ACE网络编程库等著名开源软件中选取了大量真实C、C++和java语言源代码,直观而深刻的阐述了代码中可能存在的各种质量问题,涉及可靠性、安全性、时间性和空间性、可移植性、可维护性以及浮点运算等方面,很多内容都市独辟蹊径,发前人所未发。正因如此,本书继作者的《代码阅读》之后在获Jo......一起来看看 《高质量程序设计艺术》 这本书的介绍吧!