在.NET3.0版本中微软推出了Lambda表达式。这使代码的表述可以更加优雅。但是对于新事物大多会本能的排斥,虽然3.0版本已经推出了好久了,但是我向周围的人了解了一下,用Lambda的人不是很多,即使有可以使用的场合也用旧方法来代替。其实Lambda表达式并不神秘,下面让我们一起来揭开C# Lambda的面纱。

 
下面这段简单的程序是包含了一段Lambda表达式,
    class Program
    {
        delegate string MyDelagate(string val1, string val2);
 
        static void Main(string[] args)
        {
            MyDelagate my = (param1, param2) =>
            {
                string test = " 内部变量 ";
                return param1 + param2 + test;
            };
 
            
            Console.WriteLine(my(" 参数1 ", " 参数2 "));
 
            Console.Read();
        }  

}

 
运行结果如下:
 
当然这个小例子并没有体现出Lambda的优势所在,Lambda的好处会在下一章会介绍。我们先去看看Lambda表达式的本质,正所谓透过现象看本质。现在需要一款反编译的工具
.net reflector (下载网址:http://115.com/lb/5lbd3lgqkupj) 打开该软件,将编译的项目文件用reflector 打开
 
反编译的结果和我们写的基本一致,因为我们选择了4.0,微软在3.0的时候已经推出的Lambda表达式。让我们选择.NET2.0,然后再进行反编译,看看会变成什么样子。
 
 
熟悉不? 这不就是我们所熟悉的匿名方法的写法吗。
 
既然Lambda表达式就是匿名方法写法的升级,那么在.net平台还不支持匿名方法的时候,会被反编译成什么样子呢。
 
 
我们还原一下程序:这是用一个委托,调用了一个方法,方法返回了三个变量拼接的字符串。 这段程序和之前的Lambda表达式实现的功能是一致的。
    class Class2
    {
        private delegate string MyDelagate(string val1, string val2);
 
        static void Main(string[] args)
        {
 
            MyDelagate my = new MyDelagate(Method);
            Console.WriteLine(my(" 参数1 ", " 参数2 "));
            Console.Read();
            return;
        }
 
        private static string Method(string param1, string param2)
        {
            string test = " 内部变量 ";
            return (param1 + param2 + test);
        }
 

}

 
 
通过上述的分析我们已经揭开了Lambda的面纱,同时也揭开了Lambda的发展历程。
1.在.net1.0的时候,我们在程序中只能通过方法调用来实现功能
2.或者通过定义委托来进行方法调用
3.在.net2.0中支持了匿名委托,所以可以通过编写匿名方法来实现功能。
4.在.net3.0中推出了Lambda表达式,它让我们在实现功能的同时,美化了代码结构。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Lambda表达式的面纱(一)的更多相关文章

  1. 【转载】C++ function、bind和lambda表达式

    本篇随笔为转载,原贴地址:C++ function.bind和lambda表达式. 本文是C++0x系列的第四篇,主要是内容是C++0x中新增的lambda表达式, function对象和bind机制 ...

  2. Java 8新特性探究(一) JEP126特性lambda表达式和默认方法

    Lambda语法 函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的java.la ...

  3. python 可迭代对象,迭代器和生成器,lambda表达式

    分页查找 #5.随意写一个20行以上的文件(divmod) # 运行程序,先将内容读到内存中,用列表存储. # l = [] # 提示:一共有多少页 # 接收用户输入页码,每页5条,仅输出当页的内容 ...

  4. C# Lambda表达式学习笔记

    本笔记摘抄自:https://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html,记录一下学习过程以备后续查用.     一.Lambda ...

  5. 你知道C#中的Lambda表达式的演化过程吗?

    那得从很久很久以前说起了,记得那个时候... 懵懂的记得从前有个叫委托的东西是那么的高深难懂. 委托的使用 例一: 什么是委托? 个人理解:用来传递方法的类型.(用来传递数字的类型有int.float ...

  6. Linq表达式、Lambda表达式你更喜欢哪个?

    什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...

  7. 背后的故事之 - 快乐的Lambda表达式(一)

    快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...

  8. Kotlin的Lambda表达式以及它们怎样简化Android开发(KAD 07)

    作者:Antonio Leiva 时间:Jan 5, 2017 原文链接:https://antonioleiva.com/lambdas-kotlin/ 由于Lambda表达式允许更简单的方式建模式 ...

  9. java8中lambda表达式的应用,以及一些泛型相关

    语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...

随机推荐

  1. 介绍 Visifire 常用属性的设置

    转载自http://www.cnblogs.com/xinyus/p/3422198.html 主要介绍 Visifire 常用属性的设置,用来生成不同样式的图例 设置Chart的属 //设置titl ...

  2. java equals 心得体会

    要记住最有用的一点: equals 在已经被系统定义好的类中 是已经被重写好了的 父类中的 equals方法是比较的两个对象是否指向同一引用 在被定义除了父类以外比较的是两个对象的内容 因此 人为定义 ...

  3. (一)CSS3动画应用 - CSS3 实现 侧边栏展开收起

    @keyframes 规则用于创建动画. @keyframes 中规定某项 CSS 样式,就能创建由当前样式逐渐改为新样式的动画效果 @keyframes 中创建动画时,请把它捆绑到某个选择器,否则不 ...

  4. 基于注释的Spring Security实战

    一.准备工作 预准备的工具及软件有: 1. Eclipse IDE:我使用Eclipse JEE 3.7版,即eclipse-jee-indigo-SR2-win32-x86_64.zip 2. JD ...

  5. OpenGL ES 2.0 变换

    基本变换都是通过将表示点坐标的向量与特定的变换矩阵相乘完成的. 进行基于矩阵的变换时,三位空间中点的位置需要表示成齐次坐标形式. 齐次坐标形式:在X.Y.Z3个坐标值后面增加第四个量W,未变换时W值一 ...

  6. OpenGL ES 2.0 向量

    访问向量中的某个分量<向量名>.<分量名> 将一个向量看作位置时,可以使用x.y.z.w4个分量名,其分别代表X轴.Y轴.Z轴.向量的模. 将一个向量看作颜色时,可以使用r.g ...

  7. 1236 hdu排名

    Problem Description 今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑 每题的分值,所以并不是最后的排名.给定录取分数线,请你写程序找出最后通 ...

  8. 头文件 .h 与源文件 .ccp 的区别

    .h 文件一般是用来定义的,比如定义函数.类.结构体等: .cpp 文件则是对头文件的定义进行实现. include .h文件,可以调用你声明的函数.类等.当然,比较简单的类.函数,你也可以直接在头文 ...

  9. [Apache系列]怎样在windows下配置apache vhost

    找到你的Apache安装目录,下图为小编的Apache安装的目录 2 点击conf文件夹  进入配置目录,找到httpd.conf 文件, 3 打开httpd.conf 文件,如图, 找到地475行, ...

  10. hdu 2034

    Problem Description 参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是做集合的减法 ...