zoukankan      html  css  js  c++  java
  • 匿名函数,委托和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);
        }
    }

  • 相关阅读:
    使用URLEncoder、URLDecoder进行URL参数的转码与解码
    js中的连等==和全等===
    sass用法
    sass/scss 和 less的区别
    JSON与localStorage的爱恨情仇
    ionic2
    雪碧图
    JavaScript交换两个变量值的七种解决方案
    JavaScript中的[]和{}
    为什么 ++[[]][+[]]+[+[]] = 10?
  • 原文地址:https://www.cnblogs.com/zuiyirenjian/p/2106895.html
Copyright © 2011-2022 走看看