// 依賴
using system.reflection;
**
//載入dll檔案
assembly assembly = assembly.
loadfile
(@"dll的路徑");
//獲取型別,引數(命名空間.類名)
type type = assembly.
gettype
("namespace.classname");
//建立該物件的例項,object型別,引數(命名空間.類)
object instance = assembly.
createinstance
("namespace.classname");
//設定要呼叫方法中的引數型別,type型別,如果有多個引數課追加
//假設要呼叫的方法只有乙個string型別的引數
type[
] paramstype =
newtype[1
];paramstype[0]
= type.
gettype
("system.string");
//設定要呼叫方法方法中的引數值,同上可追加
object[
] paramsobj =
newobject[1
];paramsobj[0]
="引數值"
;//執行showpara方法,並接收返回值
object returnvalue = type.
getmethod
("showpara"
, paramstype)
.invoke
(instance, paramsobj)
;
對於帶引數的且沒有無參建構函式的,使用上述方法構造例項會出錯,可以使用system.activator的createinstance(type, object)來構造例項:
//獲取型別,引數(命名空間.類)
type type = assembly.
gettype
("namespace.classname");
//構造函式引數列表
object
parames =
newobject
;//建立該物件的例項,object型別,引數(type, object)
object instance = activator.
createinstance
(type, parames)
;
靜態方法的呼叫: 在getmethod()時新增引數即可。
bindingflags.nonpublic | bindingflags.static
eg:
object returnvalue = type.
getmethod
("funname"
, bindingflags.nonpublic | bindingflags.static)
.invoke
(instance,
null
);
fieldinfo[
] allfields = type.
getfields
(bindingflags.instance | bindingflags.nonpublic | bindingflags.public)
;dictionary<
string
,object
> allfieldsmap =
newdictionary
<
string
,object
>()
;foreach
(fieldinfo f in allfields)
1
C 通過反射類動態呼叫DLL方法
個人覺得 反射 就是能按照規定 微軟.net 動態訪問特定程式集中物件的工具.網上找的 例子 使用反射方 using system using system.collections.generic using system.linq using system.text using system.re...
C 通過反射呼叫方法
用反射呼叫方法 常用於軟體架構中 假如你定義好了基類和介面,其他人使用基類派生出新的方法,你在不知道有多少類會使用此基類派生,但是你需要呼叫所有的派生類的方法時,就可以這樣,直接遍歷相同命名空間中的由基類派生的所有類,然後例項化所有類,呼叫所有方法 using system using system...
C 反射呼叫dll中的方法
反射提供描述程式集 模組和型別的物件 type 型別 可以使用反射動態地建立型別的例項,將型別繫結到現有物件,或從現有物件中獲取型別,然後呼叫其方法或訪問器字段和屬性。如果 中使用了特性,可以利用反射來訪問它們 namespace assembly name public string assemb...