在项目中我们经常会接触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. .net core 使用 swagger 生成接口文档

    微软参考文档:https://docs.microsoft.com/en-us/aspnet/core/tutorials/web-api-help-pages-using-swagger?tabs= ...

  2. JavaScript基础-即时函数(Immediate Functions)(017)

    1.即时函数的声明方法 即时函数(Immediate Functions)是一种特殊的JavaScript语法,可以使函数在定义后立即执行:(function () {    alert('watch ...

  3. Spring 获取单例流程(三)

    读完这篇文章你将会收获到 Spring 何时将 bean 加入到第三级缓存和第一级缓存中 Spring 何时回调各种 Aware 接口.BeanPostProcessor .InitializingB ...

  4. Python3笔记017 - 4.2 列表

    第4章 序列的应用 python的数据类型分为:空类型.布尔类型.数字类型.字节类型.字符串类型.元组类型.列表类型.字典类型.集合类型 在python中序列是一块用于存放多个值的连续内存空间. py ...

  5. 蓝桥杯javaB组入坑

    蓝桥杯Java B组 准备工作 练习入口 | 准备资料 | 查阅说明 编辑环境 我们建议您使用大赛指定的编辑环境来编写你的代码,以保证评测时和我们的编译环境一致,同时和比赛时使用的环境也一致. 推荐的 ...

  6. Flv.js文档使用随记

    关键字:Flv.js | Flv js | Flv-js | HTML5 FLV Player | 0x001: 前言以下涉及到 flv.js 所有内容均是V1.5.0版本内的,如方法.属性.常量.监 ...

  7. MySQL 索引结构 hash 有序数组

    MySQL 索引结构 hash 有序数组 除了最常见的树形索引结构,Hash索引也有它的独到之处.   Hash算法 Hash本身是一种函数,又被称为散列函数. 它的思路很简单:将key放在数组里,用 ...

  8. 「区间DP」「洛谷P3205」「 [HNOI2010]」合唱队

    洛谷P3205 [HNOI2010]合唱队 题目: 题目描述 为了在即将到来的晚会上有更好的演出效果,作为 A 合唱队负责人的小 A 需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共 n 个 ...

  9. 使用Python编写的对拍程序

    简介 支持数据生成程序模式, 只要有RE或者WA的数据点, 就会停止 支持数据文件模式, 使用通配符指定输入文件, 将会对拍所有文件 结束后将会打印统计信息 第一次在某目录执行,将会通过交互方式获取配 ...

  10. POJ 3977 题解

    题目 Given a list of N integers with absolute values no larger than \(10^{15}\), find a non empty subs ...