在物件導向程式設計的時候,會遇到這樣的問題,乙個父類有多個子類,需要建立乙個父類的物件,再後面根據條件去把該物件例項化具體的某個子類,然後進行操作。當然用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 建立物件例...