一、我们先看下C#代码下Lamdba表达式的写法

  // <summary>
/// 写入日志委托
/// </summary>
/// <param name="message">消息</param>
delegate void WriteLog(string message);
class Program
{
static void Main(string[] args)
{
{
WriteLog method = (message) => { Console.WriteLine(message); };
method.Invoke("写入日志测试1");
}
{
WriteLog method = (message) => { Console.WriteLine(message); };
method.Invoke("写入日志测试2");
}
Console.ReadKey();
}
}

  

二、再通过反编译工具查看

internal class Program
{
[CompilerGenerated]
[Serializable]
private sealed class <>c
{
public static readonly Program.<>c <>9 = new Program.<>c(); public static WriteLog <>9__0_0; public static WriteLog <>9__0_1; internal void <Main>b__0_0(string message)
{
Console.WriteLine(message);
} internal void <Main>b__0_1(string message)
{
Console.WriteLine(message);
}
} private static void Main(string[] args)
{
WriteLog arg_21_0;
if ((arg_21_0 = Program.<>c.<>9__0_0) == null)
{
arg_21_0 = (Program.<>c.<>9__0_0 = new WriteLog(Program.<>c.<>9.<Main>b__0_0));
}
WriteLog writeLog = arg_21_0;
writeLog("写入日志测试1");
WriteLog arg_4F_0;
if ((arg_4F_0 = Program.<>c.<>9__0_1) == null)
{
arg_4F_0 = (Program.<>c.<>9__0_1 = new WriteLog(Program.<>c.<>9.<Main>b__0_1));
}
WriteLog writeLog2 = arg_4F_0;
writeLog2("写入日志测试2");
Console.ReadKey();
}
}

三、下面我们来看一组对比图,就非常容易的看出来了

由此我们得出的结论:编译器将lambda表达式生成一个类种类,每个lamdda也会生成一个独立的方法,然后绑定到委托的实例,所谓的lamdba表达式其实只是一个“语法糖”。

Lambda表达式底层分析的更多相关文章

  1. lambda表达式底层处理机制

    为了支持函数式编程,Java 8引入了Lambda表达式,那么在Java 8中到底是如何实现Lambda表达式的呢? Lambda表达式经过编译之后,到底会生成什么东西呢? 在没有深入分析前,让我们先 ...

  2. java8 探讨与分析匿名内部类、lambda表达式、方法引用的底层实现

    问题解决思路:查看编译生成的字节码文件 目录 测试匿名内部类的实现 小结 测试lambda表达式 小结 测试方法引用 小结 三种实现方式的总结 对于lambda表达式,为什么java8要这样做? 理论 ...

  3. Java Lambda 表达式源码分析

    基本概念 Lambda 表达式 函数式接口 方法引用 深入实现原理 字节码 为什么不使用匿名内部类? invokedynamic 总结 参考链接 GitHub 项目 Lambda 表达式是什么?JVM ...

  4. c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)

    c#封装DBHelper类   public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...

  5. [Java 8] (9) Lambda表达式对递归的优化(下) - 使用备忘录模式(Memoization Pattern) .

    使用备忘录模式(Memoization Pattern)提高性能 这个模式说白了,就是将需要进行大量计算的结果缓存起来,然后在下次需要的时候直接取得就好了.因此,底层只需要使用一个Map就够了. 但是 ...

  6. Java基础(十二)lambda表达式

    1.引入lambda表达式的重要性 lambda表达式是一个可传递的代码块,可以在以后执行一次或多次. 在前面的回调部分,有一个例子是,ActionListener类实现了TimePrinter接口并 ...

  7. C++—lambda表达式+优先队列 prority_queue+关键字decltype

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入:[  1->4->5,  1->3->4,  2->6]输出: 1->1-&g ...

  8. 5万字长文:Stream和Lambda表达式最佳实践-附PDF下载

    目录 1. Streams简介 1.1 创建Stream 1.2 Streams多线程 1.3 Stream的基本操作 Matching Filtering Mapping FlatMap Reduc ...

  9. Lambda表达式运行原理

    目录 一.创建测试样例 二.利用Java命令编译分析 三.文末 JDK8引入了Lambda表达式以后,对我们写代码提供了很大的便利,那么Lambda表达式是如何运用简单表示来达到运行效果的呢?今天,我 ...

随机推荐

  1. 运维 04 Shell基础命令(二)

    Shell基础命令(二)   查看Linux的发行版 cat /etc/redhat-release cat /etc/os-release 查看系统用户的id信息 id 用户名 id root id ...

  2. PAT甲级——1147 Heaps【30】

    In computer science, a heap is a specialized tree-based data structure that satisfies the heap prope ...

  3. 排序(分组后排序&整排)

    一.整排 要求:根据score进行排名,分数相同,名次相同,且连续 表如下图: sql语句: 方法一:select a.score, (select count(distinct b.score) f ...

  4. 【最新】docker 安装elasticsearch + kibana步骤【第二篇_kibana】

    本文主要讲解Docker 安装 kibana并设置中文语言 [如果有需要安装elasticsearch 的朋友请移步博主第一篇文章] 话不多说! 第一步:docker 下载kibana docker ...

  5. teb教程1

    http://wiki.ros.org/teb_local_planner/Tutorials/Setup%20and%20test%20Optimization 简介:本部分关于teb怎样优化轨迹以 ...

  6. asp.net core Mvc 增删改查

    1.创建项目 创建Data文件夹 创建实体类Students/cs public class Students { public Guid Id { get; set; } public string ...

  7. Mongodb导入本地数据(.dat)到仓库(window)

    借鉴文章,完成了数据文件导入到Mongodb, 尊重作者版权:https://blog.csdn.net/weixin_44198965/article/details/100022616 1.找到你 ...

  8. vue中使用v-if判断数组长度是出现length报错

    在vue中使用v-if判断数组的长度时出现报错 <el-collapse-item :key="index" v-if="data.childrens.length ...

  9. Vue学习笔记【2】——Vue指令之 - v-cloak、v-text和v-html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. bootstrapTable 分页插件

    前端: @{ ViewBag.Title = "BootstrapTable 入门"; Layout = null; } <!-- 引入bootstrap样式 --> ...