zoukankan      html  css  js  c++  java
  • C#中分别对委托、匿名方法、Lambda表达式、Lambda表达式树以及反射执行同一方法的过程进行比较。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Reflection;
    using System.Linq.Expressions;
    
    namespace INPEXOne.LearnCS
    {
        class RefletLambdaDelegate
        {
            static object[] parameters = new object[] { 1, 2 };
            public delegate int addDelegate(int a, int b);
    
            public int add(int a ,int b) 
            {
                return a + b;
            }
    
            public static void Main() 
            {
                RefletLambdaDelegate rld=new RefletLambdaDelegate();       
                //利用反射调用add方法.
                MethodInfo add = typeof(RefletLambdaDelegate).GetMethod("add");
                Console.WriteLine("The add result from using the reflection is : {0}",add.Invoke(rld, parameters));
    
                //利用Lambda表达式树调用add方法.
                Expression<Func<int, int, int>> extree = (a,b) => rld.add(a, b);
                Func<int, int, int> delinstance = extree.Compile();
                int result = delinstance(int.Parse(parameters[0].ToString()), int.Parse(parameters[1].ToString()));
                Console.WriteLine("The add result from using the LambdaTree is : {0}",result);
    
                //利用Lambda表达式调用add方法.
                Func<int, int, int> addLambda = (c, d) => rld.add(c, d);
                int result1 = addLambda(int.Parse(parameters[0].ToString()), int.Parse(parameters[1].ToString()));
                Console.WriteLine("The add result from using the Lambda without tree is : {0}",result1);
    
                //利用委托调用add方法.
                addDelegate addDelgateInstance = new addDelegate(rld.add);
                int result2 = addDelgateInstance(int.Parse(parameters[0].ToString()), int.Parse(parameters[1].ToString()));
                Console.WriteLine("The add result from using the delegate is : {0}", result2);
    
                //利用匿名方法调用add方法.
                addDelegate AnonymousInstance = delegate(int a, int b) { return rld.add(a,b); };
                int result3 = AnonymousInstance(int.Parse(parameters[0].ToString()), int.Parse(parameters[1].ToString()));
                Console.WriteLine("The add result from using the anonymous method is : {0}", result3);
                Console.ReadLine();
            }
        }
    }

    以上代码分别对委托、匿名方法、Lambda表达式、Lambda表达式树以及反射执行同一方法的过程进行比较,输出结果为:

  • 相关阅读:
    LOJ 6089 小Y的背包计数问题 —— 前缀和优化DP
    洛谷 P1969 积木大赛 —— 水题
    洛谷 P1965 转圈游戏 —— 快速幂
    洛谷 P1970 花匠 —— DP
    洛谷 P1966 火柴排队 —— 思路
    51Nod 1450 闯关游戏 —— 期望DP
    洛谷 P2312 & bzoj 3751 解方程 —— 取模
    洛谷 P1351 联合权值 —— 树形DP
    NOIP2007 树网的核
    平面最近点对(加强版)
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/4439260.html
Copyright © 2011-2022 走看看