zoukankan      html  css  js  c++  java
  • .NET知识梳理——6.lambda

    1. lambda

    1.1        匿名方法lambda表达式

    Lambda表达式

    Lambda是一个匿名方法,实例化委托的一个参数,编译的时候会产生一个密封类,同时增加一个方法。

    Lambda表达式的演化

    过程如下:

    public delegate void ShowInfo(string name, int age);

    1.1.1  .NET Framework 1.0

    ShowInfo showInfo = new ShowInfo(GetInfo);

    showInfo.Invoke("Olive", 16);

    1.1.2  .NET Framework 2.0 匿名方法,delegate关键字

    showInfo = new ShowInfo(delegate (string name, int age) {

                    Console.WriteLine($"2.0:Age is {age},Name is {name}");

                });

                showInfo.Invoke("墨遥", 30);

    1.1.3  .NET Framework 3.0 去掉delegete关键字,增加一个箭头

    showInfo = new ShowInfo((string name, int age) => {

                    Console.WriteLine($"3.0:Age is {age},Name is {name}");

                });

                showInfo.Invoke("XF", 116);

                showInfo = new ShowInfo((name, age) =>//省略参数类型,编译器的语法糖,根据委托推算,编译时有类型

                {

                    Console.WriteLine($"语法糖:Age is {age},Name is {name}");

                });

                showInfo.Invoke("HY", 20);

    showInfo = new ShowInfo((name, age) => Console.WriteLine($"语法糖:Age is {age},Name is {name}   如果方法体只有一行,可以去掉大括号"));

                showInfo("遥", 21);

                showInfo=(name,age)=>Console.WriteLine($"语法糖:Age is {age},Name is {name}   可以省略new 委托 ");

                showInfo("哈哈", 18);

    1.2        匿名类 var 扩展方法

    1.2.1 匿名类 var

    .NET Framework 3.0 出现匿名类var。如下所示:

    var person = new { Id = 1, Name = "Olive", Age = 16 };

    //匿名类属性只能在创建时赋值,不能修改属性值

    1.2.2 扩展方法

    扩展方法,静态类中的静态方法,第一个参数前加this 修饰

        public static class ExtendMethod

        {

            public static void ShowInfo(this Person p)

            {

                Console.WriteLine($"Person Info is Id={p.Id},Name={p.Name},Age={p.Age}");

            }

    }

    调用如下:

      Person p = new Person() { Id = 116, Name = "Olive", Age = 30 };

                p.ShowInfo();//ShowInfo即为扩展方法,Person本身并无此方法。

    扩展方法调用,很像实例方法,就像扩展了Person的逻辑

    扩展方法的使用场景:

    1. 第三方的类,不适合修改源码,可以通过扩展方法增加逻辑
    2. 适合组件式开发的扩展(.NetCore),定义接口或者类,是按照最小需求,但是在开发的时候又经常需要一些方法,就通过扩展方法
    3. 扩展一些常见操作(会污染基础类型,一般少为object  没有约束的泛型去扩展)               

    1.3        Linq to object

    Linq To Object 是在Enumerable类,针对IEnumerable数据(指的是内存数据)进行的一些列的封装。

    Where:把对数据过滤的通用操作完成,把可变的过滤逻辑交给委托

    Select:把对数据转化的通用操作完成,把可变的转换逻辑交给委托

    OrderBy:排序

  • 相关阅读:
    使用QT实现一个简单的登陆对话框(纯代码实现C++)
    vivado + hdmi+ddr3(2)--------基于VIVADO的DDR3三个时钟
    Verilog实现之任意分频电路
    Verilog实现之异步fifo
    vivado + hdmi+ddr3(1)--------HDMI接口协议介绍及实现
    verilog实现之同步FIFO
    FPGA 开发基础---------格雷码转二进制
    verilog之生成语句
    verilog 实现之RAM
    FPGA开发基础--------Handshake Protocol握手协议(1)
  • 原文地址:https://www.cnblogs.com/Olive116/p/12362203.html
Copyright © 2011-2022 走看看