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[] { , };
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[].ToString()), int.Parse(parameters[].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[].ToString()), int.Parse(parameters[].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[].ToString()), int.Parse(parameters[].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[].ToString()), int.Parse(parameters[].ToString()));
Console.WriteLine("The add result from using the anonymous method is : {0}", result3);
Console.ReadLine();
}
}
}
以上代码分别对委托、匿名方法、Lambda表达式、Lambda表达式树以及反射执行同一方法的过程进行比较,输出结果为:

C#中分别对委托、匿名方法、Lambda表达式、Lambda表达式树以及反射执行同一方法的过程进行比较。的更多相关文章
- Java中的static关键字解析(转自海子)__为什么main方法必须是static的,因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问。
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...
- php通过反射执行某方法
简单记录下通过反射来获取某方法的参数,然后利用php内置函数类执行此方法 一个简单的test类 class test { //2个参数默认值 public function b($name='lemo ...
- 深入探究JVM之方法调用及Lambda表达式实现原理
@ 目录 前言 正文 解析 分派 静态分派 动态分派 单分派和多分派 动态分派的实现 Lambda表达式的实现原理 MethodHandle 总结 前言 在最开始讲解JVM内存结构的时候有简单分析过方 ...
- python之面向对象函数与方法,反射,双下方法
一.函数和方法 1.函数和方法的区别 函数: 全都是显性传参,手动传参,与对象无关 方法: 存在隐性传参,与对象有关 1.1通过函数名可以判断 len()就是函数 str.count()就是方法 de ...
- 在web项目启动时,使用监听器来执行某个方法
在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 这里写了个简 ...
- 在web项目启动时,执行某个方法
在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 在工作中遇到 ...
- 在web项目启动时执行某个方法
在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 在工作中遇到 ...
- 【Java】利用反射执行Spring容器Bean指定的方法,支持多种参数自动调用
目录 使用情景 目的 实现方式 前提: 思路 核心类 测试方法 源码分享 使用情景 将定时任务录入数据库(这样做的好处是定时任务可视化,也可以动态修改各个任务的执行时间),通过反射执行对应的方法: 配 ...
- 委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式
引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到和委托相关的匿名方法.Lambda表达式及泛型委托记录 ...
随机推荐
- Lua 字符串库函数总结
字符串库 注:字符串在Lua中是不可变的.不论什么的string操作都不会去改变原有的字符串.都是返回新的字符串 一.一般函数 1. 求长度 s = "Hello LUA "; p ...
- java之Math
一.Math类 java.lang.Math提供了一系列静态方法用于科学计算:其方法的參数和返回值类型一般为double型. abs 绝对值 acos,asin,atan,cos,sin,ta ...
- Eclipse 如何导入web项目
Eclipse 如何导入web项目 CreateTime--2018年3月8日09:07:16 Author:Marydon 方法一:推荐使用 1.将web项目手动拷贝到Eclipse的工作空间下 ...
- 创建安全的基于HTTP的api应用接口
#http://my.oschina.net/xiangtao/blog/196211 #要创建安全的基于HTTP的api接口,最重要的是要在服务端的进行请求的认证. #如何进行有效的服务端验证呢? ...
- 10、java初始化顺序
在new B一个实例时首先要进行类的装载.(类只有在使用New调用创建的时候才会被java类装载器装入) 2,在装载类时,先装载父类A,再装载子类B3,装载父类A后,完成静态动作(包括静态代码和变 ...
- iOS任何界面全屏炫酷倒计时,一句代码就够了
概述 iOS全屏炫酷倒计时,任何界面只需要调用一句代码就能实现,支持定制倒计时数字.倒计时结束时显示的文本.支持倒计时播放图片.开始倒计时和结束倒计时的block和delegate回调.支持定制文本颜 ...
- eclipse里没有project facets
我下载的eclipse版本问题,导入maven工程可以显示Dynamic web Module. 新建maven工程之后,点击工程属性里没有project facets,从而没有配置Dynamic w ...
- 在linux下安装并使用websocket
前言 首先,对websocket要有一个简要的了解与认识 websocket是HTML5开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议. 它基于TCP传输协议,并复用HTTP的握 ...
- Android学习系列(9)--App列表之分组ListView
吸引用户的眼球,是我们至死不渝的追求: 第一时间呈现最有价值的信息,简明大方,告诉客户,你的选择是多么的明智,这正是你寻觅已久的东西. 分组的应用场合还是很多的,有数据集合的地方 ...
- DataTable.Compute()
一.DataTable.Compute()方法說明如下 作用: 计算用来传递筛选条件的当前行上的给定表达式. 格式為: Object Compute (string ...