根據類名字串建立類名並且呼叫類裡的方法

2021-09-08 21:36:19 字數 1622 閱讀 5916

根據類名字串例項化類,並呼叫類的方法或函式

2011-03-15 13:32

//獲取型別資訊

//如果呼叫其他的dll

asmb = system.reflection.assembly.loadfrom("dll名");

// type t = asmb.gettype("類名");

//如果是不呼叫其他dll

system.reflection.assembly bll = system.reflection.assembly.load("www.www.bll");            

system.type t = bll.gettype("www.www.bll."+viewstate["bll"].tostring());            

try             ;                

//取得方法返回的值               

object returnvalue = method.invoke(dobj, flag, type.defaultbinder, parameters, null);           

}            

catch (system.exception ex)            

說明:assembly assembly = assembly.loadfile("程式集路徑,不能是相對路徑"); // 引導程式集(exe 或 dll)

object obj = assembly.createinstance("類的完全限定名(即包括命名空間)"); // 建立類的例項

若要反射當前專案中的類可以為:

assembly assembly = assembly.getexecutingassembly(); // 獲取當前程式集

object obj = assembly.createinstance("類的完全限定名(即包括命名空間)"); // 建立類的例項,返回為 object 型別,需要強制型別轉換

也可以為:

type type = type.gettype("類的完全限定名");

object obj = type.assembly.createinstance(type);

補充:1)反射建立某個類的例項時,必須保證使用類的完全限定名(命名空間 + 類名)。type.gettype 方法返回 null 則意味搜尋元資料中的相關資訊失敗(反射失敗),請確保反射時使用類的完全限定名。

2)反射功能十分強大,沒有什麼不能實現的。

「跨程式集」(如下),請使用我給的第一種方法建立類的例項,並反射該例項的字段、屬性、方法、事件... 然後動態呼叫之。

「反射」其實就是利用程式集的元資料資訊。

「跨程式集」反射可以有很多方法,編寫程式時請先導入 system.reflection 命名空間,假設你要反射乙個 dll 中的類,並且沒有引用它(即未知的型別):

assembly assembly = assembly.loadfile("程式集路徑,不能是相對路徑"); // 引導程式集(exe 或 dll)

object obj = assembly.createinstance("類的完全限定名(即包括命名空間)"); // 建立類的例項

根據類名字串建立類名並且呼叫類裡的方法

根據類名字串例項化類,並呼叫類的方法或函式 2011 03 15 13 32 獲取型別資訊 如果呼叫其他的dll asmb system.reflection.assembly.loadfrom dll名 type t asmb.gettype 類名 如果是不呼叫其他dll system.refle...

根據字串建立類例項(支援全名和部分名)

根據字串建立類例項 object obj 如果是類的全名 加了命名空間 string classfullname 反射2222.class1 obj system.activator.createinstance type.gettype classfullname 如果不是類的全名 加了命名空間 ...

C 中根據類的名稱字串建立類的例項

這種用法很像是工廠類,但是我們不需要自己實現字串到型別的對應關係,也不需要建立的類有繼承關係,如下 第一步 得到類的全名 命名空間 類名 string adaptorname this.gettype fullname case ha this.pi.name 第二部 根據全名得到類的型別 type...