zoukankan      html  css  js  c++  java
  • 委托、匿名委托和lambda表达式

    1、委托

    在.NET中,委托有点类似于C/C++中的函数指针,但与指针不同的是,委托是一种安全的类型,那么我们就以实现两个数的差为例,先声明一个成员方法:  

    public int CompareTwoValue(int a, int b)
    {
    int c=a-b;
    return c;
    }

     再声明一个委托: 

    public delegate int deleMethod(int a,int b);

       然后,我们可以通过这个委托调用这个上面的成员方法, 注意的一点是方法的参数类型和返回类型必须与委托的参数类型和返回类型相匹配。本例中成员方法和委托都是输入两个int值而输出一个int值。

    public int Show()
    {
    deleMethod d1 = new deleMethod(CompareTwoValue);//先实例化
    return d1(5,10);//再调用
    }

    2、匿名委托

    也称作匿名方法,其实,这只是一种语法形式上的变化,因为编译的时候,还是要进行类型匹配的,那么对于上面的Show方法,我可以使用匿名委托的方式来表达 

    public int Show1()
    {
    deleMethod d2 = delegate(int a, int b)
    {
    int c=a-b;
    return c;
    };
    return d2(5,10);
    }

    可以看出,语法形式上简便了,所以我个人觉得匿名委托在C#2.0中并没有实质性的用处,因为到3.0时,涉及到Lamda表达式时,才真正的有用处。

    3、Lambda表达式

    用Lamda表达式写上面的方法:

    public int Show2()
    {
    Func<int, int, int> f = ( a,b) =>
    {
    return a - b;
    };
    return f(5,10);
    }

    Lamda表达式只是匿名委托的一种表现形式。可以很直观的看出,三种方式中,Lamda表达式编写的代码量最少。

  • 相关阅读:
    DFS 算法总结
    拆分Cocos2dx渲染部分代码
    [OpenGL]纹理贴图实现 总结
    [LeetCode] Minimum Size Subarray Sum 最短子数组之和
    LRU Cache 题解
    Substring with Concatenation of All Words 题解
    multimap和multiset 认知和使用
    OpenGL ES 3.0 基础知识
    Cocos2dx坐标转换
    视图
  • 原文地址:https://www.cnblogs.com/guozhe/p/3936850.html
Copyright © 2011-2022 走看看