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是方法的表达方式越来越简化的过程。本质上都是表示一个方法。

  • 相关阅读:
    BZOJ 1049: [HAOI2006]数字序列
    BZOJ 1048: [HAOI2007]分割矩阵
    BZOJ 1047: [HAOI2007]理想的正方形
    BZOJ 1046: [HAOI2007]上升序列
    BZOJ 1045: [HAOI2008] 糖果传递
    Flink学习(十三) Flink 常见核心概念分析
    Flink学习(十二) Sink到JDBC(可扩展到任何关系型数据库)
    Flink学习(十一) Sink到Elasticsearch
    Flink学习(十) Sink到Redis
    Flink学习(九) Sink到Kafka
  • 原文地址:https://www.cnblogs.com/zps-blog/p/13273047.html
Copyright © 2011-2022 走看看