匿名函数,委托和lambda

委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的调用可以像其他任何方法一样,具有参数和返回值

委托具有以下特点:

  • 委托类似于 C++ 函数指针,但它们是类型安全的。

  • 委托允许将方法作为参数进行传递。

  • 委托可用于定义回调方法。

  • 委托可以链接在一起;例如,可以对一个事件调用多个方法。

  • 方法不必与委托签名完全匹配。

  • C# 2.0 版引入了 匿名方法的概念,此类方法允许将代码块作为参数传递,以代替单独定义的方法。C# 3.0 引入了 Lambda 表达式,利用它们可以更简练地编写内联代码块。匿名方法和 Lambda 表达式(在某些上下文中)都可编译为委托类型。这些功能统称为匿名函数。

“匿名方法”就是没有名称的方法。匿名方法通常用于将代码块作为委托参数进行传递。

 

“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。

所有 Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。该 Lambda 运算符的左边是输入参数(如果有),右边包含表达式或语句块。Lambda 表达式 x => x * x 读作“x goes to x times x”。

 

在 2.0 之前的 C# 版本中,声明委托的唯一方法是使用命名方法。C# 2.0 引入了匿名方法,而在 C# 3.0 及更高版本中,Lambda 表达式取代了匿名方法,作为编写内联代码的首选方式。不过,本主题中有关匿名方法的信息同样也适用于 Lambda 表达式。有一种情况下,匿名方法提供了 Lambda 表达式中所没有的功能。匿名方法使您能够省略参数列表,这意味着可以将匿名方法转换为带有各种签名的委托。这对于 Lambda 表达式来说是不可能的。

 

例:

delegate int AdditionDelegate(int a, int b);//委托类
class AdditionClass
{
    int a;
    int b;
    public AdditionClass(int a, int b)
    {
        this.a = a;
        this.b = b;
    }

    private int Addition(int a, int b)
    {
        return a + b;
    }

    public int Addition1()
    {
        AdditionDelegate myAdd = new AdditionDelegate(Addition);
        return myAdd(a, b);
    }

    public int Addition2()
    {
        AdditionDelegate myAdd = delegate(int aa, int bb) { return aa + bb; }; //匿名方法

        return myAdd(a, b);
    }
    public int Addition3()
    {
        AdditionDelegate myAdd = (aa, bb) => aa + bb; //Lambda表达式

        return myAdd(a, b);
    }
}

原文地址:https://www.cnblogs.com/zuiyirenjian/p/2106895.html