C 反射通過類名例項化類

2021-09-22 13:49:03 字數 1652 閱讀 4787

在物件導向程式設計的時候,會遇到這樣的問題,乙個父類有多個子類,需要建立乙個父類的物件,再後面根據條件去把該物件例項化具體的某個子類,然後進行操作。當然用if else 或者switch來做也可以,但是後期擴充套件性不好,特別是要把這些類封裝成dll提供給被人用,更不合適了。這時候反射就提供了很好的解決方案。使用也很方便。

using

system.reflection;

assembly assembly = assembly.loadfile("程式集路徑,不能是相對路徑"

); // 載入外部程式集(exe 或 dll)

assembly assembly = assembly.getexecutingassembly(); // 載入當前程式集

// 建立類的例項,建構函式不帶引數,返回為 object 型別,需要強制型別轉換

object

obj = assembly.createinstance();

// 建立類的例項,建構函式帶引數,返回為 object 型別,需要強制型別轉換

object

obj = assembly.getexecutingassembly().createinstance("類的完全限定名(即包括命名空間)"

, true

, system.reflection.bindingflags.default, null

, 建構函式所需引數 object

型別, null

, null

)

下面是我自己使用的例子

///

///建立物件例項

//////要建立物件的型別

///型別所在命名空間

///型別名

///構造函式引數

///public

static

t createinstance(string

namespace,string

classname, object

parameters)

catch

}

這是初步封裝的函式,後面更具需要進一步封裝成需要的函式,呼叫上面函式是在iomanager類中。

///

///根據類名建立具體外掛程式的例項

//////外掛程式類名,可以通過getplugintype函式獲取

///構造外掛程式例項所需的基本資訊

///public

static

pluginbase createinstance

(string

classname, tableinfo tableinfo)

在實際呼叫中,上面函式是在pluginbase類中。

pluginbase netplugin = pluginbase.createinstance

(this.pluginmodelname

,tableinfo);

這樣就實現了,根據pluginbase父類下面子類的類名,和構造類所需要的tableinfo 引數,就能將pluginbase的物件例項化pluginbase下面子類的例項。

C 反射通過類名例項化類

在物件導向程式設計的時候,會遇到這樣的問題,乙個父類有多個子類,需要建立乙個父類的物件,再後面根據條件去把該物件例項化具體的某個子類,然後進行操作。當然用if else 或者switch來做也可以,但是後期擴充套件性不好,特別是要把這些類封裝成dll提供給被人用,更不合適了。這時候反射就提供了很好的...

c 通過反射 例項化類

1.用type 在 website 下 userdao userdao userdao type.gettype userdaopath getconstructor system.type.emptytypes invoke null 如果構造方法有引數的話,這樣。定義引數型別陣列 type tp...

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

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