zoukankan      html  css  js  c++  java
  • 【C#】委托和Lambda表达式

    一、方法

    Public static void Method1(string name)
    
    {
    
            Console.WriteLine(string);
    
    }

    二、委托

    委托就是表示方法的类型。声明委托本质上就是声明一个类。为了减少自定义委托类型,.NET3.5中,包含一组通用的委托,大部分都是泛型委托。

    根据方法的返回值类型,将方法分为返回void和有返回值。有返回值的方法用System.Func系列委托表示;返回void的方法用System.Action系列委托表示。

    Public static bool GreaterThan(int first,int second)
    
    {
    
            Return first > second;
    
    }

    该方法就可用System.Func系列委托表示,声明委托实例代码如下:

    Func<int,int,bool>  comparisonMethod = new Func<int,int,bool>(GreaterThan);

    Func委托的最后一个类型总是对应委托的返回类型,这里是bool类型。其他参数类型依次对应于委托参数的类型。

    如果不使用System.Func,也可以自己声明委托,效果都是一样的。代码如下:

    Public delegate bool GreaterThanDelegate(int first,int second);
    
    GreaterThanDelegate greaterThanDelegate = new GreaterThanDelegate(GreaterThan);

    三、Lambda表达式

    要创建一个委托对象,需要声明一个方法如GreaterThan,声明一个委托如GreaterThanDelegate,最后在实例化greaterThanDelegate对象。为了简化这个过程,可以使用匿名方法或者Lambda表达式,二者的作用是相同的,只是写法有区别。

    Public static bool GreaterThan(int first,int second)
    
    {
    
            Return first > second;
    
    }
     
    Public delegate bool GreaterThanDelegate(int first,int second);
    
    GreaterThanDelegate greaterThanDelegate = new GreaterThanDelegate(GreaterThan);
    
    // BubbleSort方法需要用到Delegate类型的参数
    
    BubbleSort(items, greaterThanDelegate);

    使用匿名方法:

    BubbleSort(items,
    
    Delegate(int first,int second)
    
    {
    
            Return first < second;
    
    }
    
    );

    使用Lambda表达式:

    BubbleSort(items,
    
    (int first,int second) =>
    
    {
    
    return first < second;
    
    }
    
    );

    通过这两种写法,可以简化创建委托实例的过程。

    Lambda表达式分为语句Lambda和表达式Lambda,表达式Lambda更加简洁。

    语句lambda由形参列表,后跟Lamnda操作符=>,然后跟一个代码块构成。

    跟完整的方法声明相比,语句Lambda可以省略方法名、可访问性、返回类型、甚至可以不指定参数类型。

    匿名方法必须显式指定参数类型,必须有一个语句块,并在参数列表前添加delegate关键字。

    四、总结:

    完整方法声明➡匿名方法➡语句Lambda➡表达式Lambda是方法的表达方式越来越简化的过程。本质上都是表示一个方法。

  • 相关阅读:
    2020.4.21 考试T1 HDU 5729
    BZOJ 4198: [Noi2015]荷马史诗
    BZOJ 1052: [HAOI2007]覆盖问题
    BZOJ 1087: [SCOI2005]互不侵犯King
    BZOJ 4466 线性函数
    Linux如何挂载U盘
    集中式日志分析平台
    ELK5.2+kafka+zookeeper+filebeat集群部署
    浅析ES的_source、_all、store、index
    IndexOf、LastIndexOf、Substring的用法
  • 原文地址:https://www.cnblogs.com/zps-blog/p/13273047.html
Copyright © 2011-2022 走看看