Lambda 表达式的简介及形成过程

Lambda 表达式的简介及形成过程

C#的Lambda表达式是一种"语法糖",使用 Lambda 运算符 =>,该运算符读为“goes to”。语法如下:

形参列表=>函数体

函数体多于一条语句的可用大括号括起。

要了解Lambda表达式,首先就要了解什么是委托,委托(delegate)是一种引用类型.简单讲,委托就是一个函数指针.先看一个例子

//声明一个委托

public delegate int DelegateAdd(int a, int b);

public class A

{

//静态的处理方法

public static int Add(int a, int b)

{

return a + b + 3;;

}

}

//入口类

public class B

{

public static void Main()

{

//实例一个委托

DelegateAdd mdh = new DelegateAdd(A.Add);

//调用委托

int sum = mdh(2, 2);

Console.WriteLine(sum.ToString());

}

}

上面是一个非常简单的例子,具体的实现步骤:

1、 先声明个委托实例 ;

2、然后提供要处理的方法;

3、再实例化委托(把委托看作是类的话,实例化委托就不难理解了,其参数是要处理的方法,这里的方法 不用加括号,实例化的过程就是装载方法的过程,就好像需要参数的构造函数一样)实例化后的委托对象就好比是c++中的指针,它本身就是封装了方法的对象;

4、最后我们调用委托对象就好比是调用了被封装方法本身,调用时的参数也就传给了被封装的方法。

5、需要注意的是 所声明的委托无论是 参数个数,参数类型,返回值类型 都要和所要封装的方法保持一致,当调用委托实例对象时,所传入的参数也要保持一致 ,否则会出现错误。

以上实例是定义了一个A.Add()的方法.但是还有一种方法,就是先不定义,在实例化委托的时候,直接定义一个匿名方法.则以上实例变成了以下代码

public delegate int DelegateAdd(int a, int b);

//入口类

public class B

{

public static void Main()

{

//实例一个委托的同时,定义了一个匿名方法

DelegateAdd mdh = new DelegateAdd(delegate(int a,int b){return a+b+3;});

//调用委托

int sum = mdh(2, 2);

Console.WriteLine(sum.ToString());

}

}

以上方法就是做了一步的改进,使用了匿名方法,就不用在外部在定义方法了.

进一步的优化以下语句:

DelegateAdd mdh = new DelegateAdd(delegate(int a,int b){return a+b+3;});

1) 省略了 new DelegateAdd

DelegateAdd mdh = delegate(int a,int b){return a+b+3;};

2) 省略了关键字 delegate,并加上符号 =>

DelegateAdd mdh = (int a,int b)=>{return a+b+3;};

3) 省略参数类型

DelegateAdd mdh = (a,b)=>{return a+b+3;};

4) 省略可以省略的括号,return 等,最终形成Lambda表达式

DelegateAdd mdh = (a,b)=>a+b+3;

再举个系统常用的委托:Func<T,TResult>. 如下:

1)new Func<string,int>(delegate(string str){return str.length;})

2)delegate(string str){return str.length;}

3)(string str)=>{return str.length;}

4)(string str)=>str.length;

5)(str)=>str.length;

6)str=>str.length;

时间: 2024-11-13 06:22:50

Lambda 表达式的简介及形成过程的相关文章

不一样的编码风格--Lambda表达式

Lambda表达式也是C#3.0中最重要的特性之一. 1.Lambda表达式的简介 Lambda表达式可以理解为一个匿名方法,它可以包含表达式和语句,并且用于创建委托或转换为表达式树.在使用Lambda表达式时,都会使用“=>”运算符,该运算符的左边是匿名方法的输入参数,右边则是表达式或语句块. 1.1 Lambda表达式的演变过程 其实Lambda表达式是匿名方法的投胎转世.下面以代码来鉴定: 1 C# 1.0 2 Func<string,int> delegatetest1=new

c++ Lambda表达式简介

Lambda表达式 C++11标准的lambda引入的主要目的是: 能够将类似于函数的表达式用作接受函数指针或函数符的函数参数,因此,典型的lambda表达式是测试表达式或者比较表达式,可编写为一条语句,这使得lambda简洁而易于理解. 1.一个lambda表达式有如下类型: [capture list](parameter list)->returntype{function body} Capture list是(捕获列表)一个lambda所在的函数中定义的局部函数变量的列表,return

C++ lambda 表达式 简介

自己根据对lambda表达式的理解,做了一套ppt简单介绍 原文地址:https://www.cnblogs.com/Phoenix-blog/p/8988316.html

Java8的Lambda表达式简介

先阐述一下JSR(Java Specification Requests)规范,即Java语言的规范提案.是向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求.任何人都可以提交JSR,可以向Java平台增添新的API和服务.JSR已成为Java界的一个重要标准.可以理解为JSR是Java开发者以及授权者指定的标准,而Java开发者以及授权者形成一个JCP国际组织.职能是制定Java标准,即所有的规范都是有迹可循的. 在Java8中推出的lambda表达式

Lambda表达式详解【转】

前言 1.天真热,程序员活着不易,星期天,也要顶着火辣辣的太阳,总结这些东西. 2.夸夸lambda吧:简化了匿名委托的使用,让你让代码更加简洁,优雅.据说它是微软自c#1.0后新增的最重要的功能之一. lambda简介 lambda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,“转到”或者 “成为”.运算符将表达式分为两部分,左边指定输入参数,右边是lambda的主体. lambda表达式: 1.一个参数:param=>expr 2

Lambda表达式详解

前言 lambda:简化了匿名委托的使用,让你让代码更加简洁,优雅.据说它是微软自c#1.0后新增的最重要的功能之一. lambda简介 lambda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,“转到”或者 “成为”.运算符将表达式分为两部分,左边指定输入参数,右边是lambda的主体. lambda表达式: 1.一个参数:param=>expr 2.多个参数:(param-list)=>expr 上面这些东西,记着,下面我们

Java Lambda表达式入门[转]

原文链接: Start Using Java Lambda Expressions http://blog.csdn.net/renfufei/article/details/24600507 下载示例程序 Examples.zip .原文日期: 2014年4月16日 翻译日期: 2014年4月27日翻译人员: 铁锚简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要

[深入学习C#] 匿名函数、委托和Lambda表达式

匿名函数 匿名函数(Anonymous Function)是表示"内联"方法定义的表达式.匿名函数本身及其内部没有值或者类型,但是可以转换为兼容的委托或者表达式树类型(了解详情).匿名函数转换的计算取决于转换的目标类型:如果是委托类型,则转换计算为引用匿名函数所定义的方法的委托:如果是表达式树类型,则转换将计算以对象结构形式表示方法结构的表达式树.  匿名函数有两种语法风格:Lambda表达式(lambda-expression)和匿名方法表达式(anonymous-method-ex

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

作者:Antonio Leiva 时间:Jan 5, 2017 原文链接:https://antonioleiva.com/lambdas-kotlin/ 由于Lambda表达式允许更简单的方式建模式函数,所以它是Kotlin和任何其他现代开发语言的最强工具之一. 在Java6中,我们仅能下面方法这样做:通过用单一方法声明接口,并用匿名对象实现那些接口. Lambda表达式特别是在Kotlin中能定义的方式,为我们开启无线可能的世界.在接下来的内容中,我们将了解这些用法. Kotlin的Lamb