在项目中我们经常会接触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;

委托、匿名方法到lambda表达式的更多相关文章

  1. 委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式

    引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到和委托相关的匿名方法.Lambda表达式及泛型委托记录 ...

  2. C# 从CIL代码了解委托,匿名方法,Lambda 表达式和闭包本质

    前言 C# 3.0 引入了 Lambda 表达式,程序员们很快就开始习惯并爱上这种简洁并极具表达力的函数式编程特性. 本着知其然,还要知其所以然的学习态度,笔者不禁想到了几个问题. (1)匿名函数(匿 ...

  3. 委托、匿名方法、Lambda表达式的演进

    摘自:"http://www.cnblogs.com/eagle1986/archive/2012/01/19/2327358.html 假设给我们一个泛型对象List<T>,T ...

  4. 泛型委托及委托中所涉及到匿名方法、Lambda表达式

    泛型委托及委托中所涉及到匿名方法.Lambda表达式 引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到 ...

  5. .NET Framework System.Array.Sort 数组类,加深对 IComparer、IComparable 以及泛型委托、匿名方法、Lambda 表达式的理解

    本文内容 自定义类 Array.Sort 参考资料 System.Array.Sort 有很多对集合的操作,比如排序,查找,克隆等等,你可以利用这个类加深对 IComparer.IComparable ...

  6. C#中分别对委托、匿名方法、Lambda表达式、Lambda表达式树以及反射执行同一方法的过程进行比较。

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. 转 拉姆达表达式,委托、匿名方法、Lambda表达式的演进

    总结:Lambda表达式的语法:(参数列表=>执行语句) 无参数格式 :()=>{执行语句} 有参数格式:x=> x % 2 == 0 1.假设给我们一个泛型对象List<T& ...

  8. 从匿名方法到 Lambda 表达式的推演过程

    Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数. 以上是msdn官网对Lambda 表达式 ...

  9. 匿名方法,Lambda表达式,高阶函数

    原文:匿名方法,Lambda表达式,高阶函数 匿名方法 c#2.0引入匿名方法,不必创建单独的方法,因此减少了所需的编码系统开销. 常用于将委托和匿名方法关联,例如1. 使用委托和方法关联: this ...

  10. Fun<>,匿名方法,Lambda表达式 冒泡排序C#

    大头文 分享,进步 冒泡排序C#实现,使用委托,包括三种方式:Fun<>,匿名方法,Lambda表达式 冒泡排序是一种简单的排序方法,适合于小量数字排序,对于大量数字(超过10个),还有更 ...

随机推荐

  1. sublime清空控制台

    解决方法 – 只需运行print('\n'*100)打印100个换行符,您将无法看到任何以前的输出,除非你向上滚动一些距离.

  2. Github中添加SSH key

    1-创建密钥,在终端输入下面的命令 ssh-keygen -t rsa -b -C "你的邮箱" //双引号不能去 要求输入密码,建议回车使用空密码方便以后的每次连接,此时会生成一 ...

  3. 浏览器的回流与重绘 (Reflow & Repaint)

    写在前面 在讨论回流与重绘之前,我们要知道: 浏览器使用流式布局模型 (Flow Based Layout). 浏览器会把HTML解析成DOM,把CSS解析成CSSOM,DOM和CSSOM合并就产生了 ...

  4. Meta标签大全_web开发常用meta整理

    meta标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 web 服务. 必要属性 属性 值 描 ...

  5. 重学 Java 设计模式:实战模版模式「模拟爬虫各类电商商品,生成营销推广海报场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 黎明前的坚守,的住吗? 有人举过这样一个例子,先给你张北大的录 ...

  6. APP开发---Windows查看端口是否被占用

    前言:在后台设计的过程中,当你把后台的代码编辑好之后经常会发现,上传jar包之后,却出现了错误,错误结果显示端口被占用,下面就是如何查看Windows端口是否被占用的方法总结 ------------ ...

  7. [JAVA]《JAVA开发手册》规约详解

    [强制] 使用 Map 的方法 keySet()/values()/entrySet()返回集合对象时,不可以对其进行添加元素操作,否则会抛出 UnsupportedOperationExceptio ...

  8. git clone下载速度很慢的解决方法

    一直用git clone从github上下载源码学习,但是有时候git clone速度好慢,只有几Kb的速度,按这个速度下载安卓源码的话估计要下一年. 然后我再网上找各种教程,试过通过vps下载git ...

  9. postman 进阶技巧

    cookie 清除缓存 code 生成接口自动化测试脚本 响应部分 pretty 响应以json或xml显示 raw 响应以文本显示 preview 以HTML网页行驶显示 断言 断言:用于判断接口请 ...

  10. 权力越大职责越大——C#中的职责链模式

    大家好,欢迎来到老胡的博客,今天我们继续了解设计模式中的职责链模式,这是一个比较简单的模式.跟往常一样,我们还是从一个真实世界的例子入手,这样大家也对这个模式的应用场景有更深刻的理解.   一个真实的 ...