在项目中我们经常会接触lambda表达式,链式操作简洁明了。帮我们省了不少事。面对这么神奇的一个东西,是不是也应该了解了解它的本质呢。

今天我们通过一步一步的演变揭开lambda表达式的本质

一.委托

C# 中的委托类似于 C 或 C++ 中函数的指针。委托是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。委托的本质也跟类一样,是用户自定义的类型。类的定义是通过class关键字

,而委托的定义是通过delegate来定义

    class Program
{
static void Main(string[] args)
{
//声明一个AddNum类型的变量a,
AddNum a = new AddNum(Add); //创建一个指向Add方法的委托对象
a(, ); //调用a指向的方法
Console.WriteLine(a); //打印a的类型,a(2,3)加上括号才是调用
Console.WriteLine(a(, ));
}
//声明一个方法以便委托调用,要注意的是方法的签名要与委托声明的签名保持一致
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(,)); //委托的调用还是一样的

三.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;

最新文章

  1. C#12种顺序排序
  2. CentOS6.5下安装Open vSwitch
  3. Recovery with Incremental Backups
  4. css不同浏览器兼容性调试 --- 转自: [http://wo.115.com/?ct=detail&amp;id=31733&amp;bid=1018841]
  5. JQuery判断checkbox是否选中-批量
  6. 【C#学习笔记】退出程序
  7. Angular - - ngChange、ngChecked、ngClick、ngDblclick
  8. Java并发编程:volatile 关键字
  9. 开源API集成测试工具 Hitchhiker v0.2更新 - 压力测试
  10. linux 磁盘管理三部曲——(1)磁盘结构,认识分区
  11. iOS通用链接(Universal Links)突然点击无效的解决方案
  12. Cursor类取出数据
  13. vue_小项目_吃饭睡觉打豆豆
  14. eclipse Dynamic web module相关问题
  15. 11.17 luffycity(7)完结
  16. js内存空间的那点事
  17. linux+nginx+mysql+php环境下,安装ecshop
  18. FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
  19. 一、怎样使用eclipse查看JDK源码
  20. java中如何制定自定义异常

热门文章

  1. 入门大数据---Hbase 过滤器详解
  2. 使用scrapy实现去重,使用Redis实现增量爬取
  3. 看完这篇Redis缓存三大问题,保你面试能造火箭,工作能拧螺丝。
  4. 一.前后端分离及drf实现序列化的原理
  5. Java项目开启远程调试(tomcat、springboot)
  6. 真的可以,用C语言实现面向对象编程OOP
  7. 多核CPU硬件架构介绍
  8. (私人收藏)PPT数据图表
  9. TCP Wrappers(简单防火墙)---限制IP登录ssh
  10. 11.unity3d 摄像机快速定位到Scene视角