zoukankan      html  css  js  c++  java
  • c#之lamda表达式的前世今生

     最近在培训新同事时候发现大家linq都使用很溜,但是问其原理就说说不上来,linq非常方便,这得归功于lamda表达式的问世,趁今天有时间就写下这篇文章,希望对c#的爱好者起到一定的帮助。
    同时也作为一个c#忠实拥护者,从1.0到4.0到net core,c#不断的给我们惊喜,下面就从lamda表达式来看一下微软为我们做了什么?

    我们先来看下从 .Net Framework1.0到 .Net Framework3.0,委托传入参数的演变过程。

    定义委托

    在微软没有在框架中给我们定义Action和Func之前,使用委托必须进行生命,如下:

    c#之lamda表达式的前世今生

    使用委托

    在.net Framework 1.0的时候,委托只能只能传入已经定义的方法

    c#之lamda表达式的前世今生

    其中方法DoNothing和DoSomething必须实现定义好。

    匿名函数

    在.net Framework 2.0的时候,微软发现为了委托专门定义一个方法太多此一举了,所以2.0可以通过delegate关键词传入匿名函数。

    c#之lamda表达式的前世今生

    lamda表达式的出现

    在.net Framework 3.0的时候,delegate关键词完全可以省略了,代码如下

    c#之lamda表达式的前世今生

    其中的new实例化这种语法还可以直接省略不写,如下:

    c#之lamda表达式的前世今生

    如果存在下面情形,还可以进行简写

    1、如果带参数,参数类型可以省略,编译器会根据委托定义时候的类型自动推算变量类型。

    2、如果方法体只有一行,外面的大扩号还可以省略,最后的简写如下:

    c#之lamda表达式的前世今生

    这就是lamda表达式的由来。

    其实lamda只是一个微软给我们定义好的语法糖,如果有兴趣的朋友可以通过ilspy参看中间il代码,会发现 你写的lamda表达式还是会创建一个用delegate关键词定义的匿名函数。

    从上面的演变可以看出,微软尽可能的为我们简化代码,让程序猿更专注于业务本身而不是书写方式,这就是我为什么喜欢用c#的的原因。

    题外话,到了.net Framework 4.0后,微软为我们定义了泛型委托Action和Fun,这样我们就不需要再只去定义委托了,直接用微软给我们定义的就可以,上面的委托可以写成下面的形式:

    c#之lamda表达式的前世今生

    是不是更方便了,所以即使在Java大行其道的今天,c#一直在没有停下脚步,不断的进步和增加使用体验,我也是我死忠c#的原因,等后面有时间我再写一篇关于linq的文章,然后封装一个我们自己的linq,让大家明白linq的原理。

  • 相关阅读:
    OCP 062【中文】考试题库(cuug内部资料)第29题
    413. 等差数列划分 力扣(中等) 找规律,细节
    264. 丑数 II 力扣(中等) 动态规划,不会
    313. 超级丑数 力扣(中等) 动态规划,不会做
    5840. 使字符串平衡的最小交换次数 力扣(中等) 第255场oppo周赛 猜出来的
    手写一个仿微信登录的Nodejs程序
    你不知道的CSS国际化
    React实现类似淘宝tab居中切换效果
    原来 CSS 这样写是会让 App 崩溃的
    css中class和id之间有什么区别?
  • 原文地址:https://www.cnblogs.com/huaguo/p/12055932.html
Copyright © 2011-2022 走看看