使用Expressions呼叫實體的方法

2022-06-26 12:39:14 字數 1727 閱讀 2233

expressions如何實現反射呼叫實現方法類似的功能呢(並且效率比使用反射高)?下面就把方法分享給大家:

1

using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.linq.expressions;

5using

system.reflection;

6using

system.text;

7using

system.threading.tasks;89

namespace

syspetro.core.extensions

1020

21public

dynamicmethodexecutor(methodinfo methodinfo)

2225

///26

///呼叫方法

27///

28///

實體物件

29///

引數列表

30///

31public

object execute(object instance, object

parameters)

3235

private

static funcgetexecutedelegate(methodinfo methodinfo)

3656

57//

non-instance for static method, or ((tinstance)instance)

58 expression instancecast = methodinfo.isstatic ? null:59

expression.convert(instanceparameter, methodinfo.reflectedtype);

6061

//static invoke or ((tinstance)instance).method

62 methodcallexpression methodcall =expression.call(

63instancecast, methodinfo, parameterexpressions);

6465

//((tinstance)instance).method((t0)parameters[0], (t1)parameters[1], ...)

66if (methodcall.type == typeof(void

))67;78

}79else

8089}90

}91 }

如何使用呢:

1

var service = _serviceprovider.getservice(type);//

通過依賴注入例項化實體

23 dynamicmethodexecutor dynamicmethodrun = new dynamicmethodexecutor(service, "

run"

);//呼叫實體類的 run()方法

4

var redata = dynamicmethodrun.execute(service, null);//redata為方法的返回值

MyBatis B 使用 呼叫

hello mybatis mybatis 3.4.5.jar lib jar可以新增也可以不新增 新增對應的資料庫驅動 2 建立資料庫的表結構 create table t users id bigint primary key auto increment,username varchar 20...

使用luaplus 呼叫lua

include include include ifdef debug pragma comment lib,luaplus debug.lib else if pragma comment lib,luaplus release.lib endif int main 就這麼簡單 再加乙個例子 in...

使用c 呼叫matlab

使用的環境是vs2008 matlab2011,其它的版本應該差不多。使用matlab寫好乙個函式後,在c 中呼叫它,可以極大的提高開發速度。由於別的文章沒有介紹如何輸入輸出,我在這裡再寫一遍。1.配置 文章中,已經詳細介紹了如何配置matlab,不再贅述。2.編譯 上面的文章使用命令編譯,編譯出的...