C#中分别对委托、匿名方法、Lambda表达式、Lambda表达式树以及反射执行同一方法的过程进行比较。
2015-04-19 15:46
861 查看
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表达式树以及反射执行同一方法的过程进行比较,输出结果为:
相关文章推荐
- 为LINQ服务的C#新特性总结篇---扩展方法,匿名委托,lambda表达式,Action委托,Func委托,Linq中的order by,top和sum函数
- C# 委托的发展史: .Net 1.x 委托 =>.Net 2.x 匿名方法 => .Net 3.0/3.5 Lambda 表达式
- C#中的委托,匿名方法、泛型委托和Lambda表达式表达式演变过程
- C# 从CIL代码了解委托,匿名方法,Lambda 表达式和闭包本质
- c# 中的委托以及匿名方法lambda
- .NET Framework System.Array.Sort 数组类,加深对 IComparer、IComparable 以及泛型委托、匿名方法、Lambda 表达式的理解
- C# 匿名委托、匿名方法、匿名对象、Lambda表达式
- 十二、C# 委托与Lambda表达式(匿名方法的另一种写法)
- C# 传统的委托、匿名方法、Lambda对比
- C#中方法的直接调用、反射调用与Lambda表达式调用对比
- 编写高质量代码改善C#程序的157个建议——建议37:使用Lambda表达式代替方法和匿名方法
- 从匿名方法到 Lambda 表达式的推演过程
- 通过Func 委托理解委托和匿名方法及Lambda 表达式
- 转 拉姆达表达式,委托、匿名方法、Lambda表达式的演进
- 泛型委托及委托中所涉及到匿名方法、Lambda表达式
- C# λ运算符=>匿名方法 lambda表达式
- 委托、匿名方法、Lambda表达式的演进
- 第八章(3)-委托的匿名方法与Lambda表达式-学习笔记
- C# 新委托使用方法 Lambda表达式,运算符 =>
- C#学习之初步理解委托、事件、匿名方法和Lambda