C 利用反射根據類名建立類的例項物件

2022-07-01 10:57:09 字數 1364 閱讀 5109

「反射」其實就是利用程式集的元資料資訊。 反射可以有很多方法,編寫程式時請先導入 system.reflection 命名空間。

1、假設你要反射乙個 dll 中的類,並且沒有引用它(即未知的型別):

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

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

2、若要反射當前專案中的類(即當前專案已經引用它了)可以為:

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

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

3、也可以為:

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

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

4、不同程式集的話,則要裝載呼叫,**如下:

system.reflection.assembly.load("程式集名稱(不含檔案字尾名)").createinstance("命名空間.類名", false);

如:dynamic o = system.reflection.assembly.load("mydll").createinstance("mynamespace.a", false);

由於要用到dynamic ,需要把target 改為4.0 ,如果編譯時出現「找不到編譯動態表示式所需的乙個或多個型別。是否缺少引用?」的錯誤,是因為缺少乙個引用,在專案裡引用miscorsoft.csharp類庫,新增後就能編譯成功。

/// /// 反射幫助類

///

public static class reflectionhelper

/// /// 建立物件例項

///

/// 要建立物件的型別

/// 型別所在程式集名稱

/// 型別所在命名空間

/// 型別名

///

public static t createinstance(string assemblyname, string namespace, string classname)

catch}}

C 利用反射根據類名建立類的例項物件

1 假設你要反射乙個 dll 中的類,並且沒有引用它 即未知的型別 assembly assembly assembly.loadfile 程式集路徑,不能是相對路徑 引導程式集 exe 或 dll dynamic obj assembly.createinstance 類的完全限定名 即包括命名空...

C 反射 通過類名建立類例項

反射 其實就是利用程式集的元資料資訊。反射可以有很多方法,編寫程式時請先導入 system.reflection 命名空間。2 若要反射當前專案中的類 即當前專案已經引用它了 可以為 3 也可以為 參考 反射幫助類 public static class reflectionhelper 建立物件例...

C 根據類名建立類的例項物件

因為我使用這個方法的類都是和abstractscenepagedto處於乙個命名空間以及程式集下的,所以獲取命名空間和程式集的時候,直接使用abstractscenepagedto這個類進行獲取,這樣更準確一些,也不怕專案遷移改名。1 private t createactivityscenepag...