匿名函数,委托和lambda

简介: 委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的调用可以像其他任何方法一样,具有参数和返回值 委托具有以下特点: 委托类似于 C++ 函数指针,但它们是类型安全的。

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

委托具有以下特点:

  • 委托类似于 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);
    }
}

相关文章
|
1月前
|
开发框架 .NET 编译器
C#学习相关系列之匿名方法和Lambda表达式
C#学习相关系列之匿名方法和Lambda表达式
|
5月前
|
编译器
匿名函数lambda
匿名函数lambda
32 0
Zp
Lambda 自带的匿名函数
Lambda 自带的匿名函数
Zp
60 0
|
安全 Java
Lambda、方法引用、函数式接口
Lambda、方法引用、函数式接口
|
存储 算法 编译器
【C++】lambda 表达式 | 包装器
【C++】lambda 表达式 | 包装器
【C++】lambda 表达式 | 包装器
|
编译器 C++
C++的匿名函数(lambda表达式)
C++的匿名函数(lambda表达式)
333 1
C++的匿名函数(lambda表达式)
|
程序员 编译器 Linux
C++的lambda是函数还是对象?
关于C++的lambda是函数还是对象,这其实不是一个一概而论的问题。
123 0
|
程序员 C#
C# 匿名方法
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默。我眼中的程序员大多都不爱说话,默默承受着编程的巨大压力,除了技术上的交流外,他们不愿意也不擅长和别人交流,更不乐意任何人走进他们的内心,他们常常一个人宅在家中! 废话说多了,咱进入正题: 上一节我们谈到了匿名变量,本节我们学习匿名方法。
907 0