C 反射 動態建立物件

2021-07-11 16:33:13 字數 2174 閱讀 3353

上面部落格學習了使用反射檢視型別的資訊,以及使用反射獲取特性物件。

下面使用反射來動態建立物件。首先準備乙個test類:

public class testclass

public testclass(int a, int b)

public int show()

public static int show(int a,int b)

}

1.使用無參建構函式建立物件:
//使用無參建構函式建立物件

assembly asm = assembly.getexecutingassembly();//獲取當前**所在程式集

object obj = asm.createinstance("assemblydemo.testclass", true);//建立乙個物件testclass物件

//列印:這是乙個無參建構函式

objecthandle handler = activator.createinstance(null, "assemblydemo.testclass");

//createinstance 第乙個引數為程式集名稱,為null 表示當前程式集,第二個引數表示要建立的型別

object obj1 = handler.unwrap();

//列印:這是乙個無參建構函式

2.使用有引數建構函式建立物件:
//使用有參建構函式建立物件            

object param= new object[2];

param[0]=1;

param[1]=2;

assembly asm2 = assembly.getexecutingassembly();

object obj2 = asm2.createinstance("assemblydemo.testclass", true, bindingflags.default, null, param ,null,null);

//bindingflag是限定對型別成員的搜尋,這裡default不使用bindingflags策略

3.動態呼叫方法:使用invokemember呼叫方法

//動態呼叫無引數方法

type t = typeof(testclass);

testclass ts=new testclass (1,2);

int result = (int)t.invokemember("show", bindingflags.invokemethod,null,ts,null);

console.writeline(result);

//動態呼叫有參靜態方法

type t1 = typeof(testclass);

int result1 = (int)t1.invokemember("show",bindingflags.invokemethod,null,t1,param);

console.writeline(result1);

4.使用methodinfo.invoke呼叫方法:

//使用methodinfo.invoke呼叫方法

通過反射動態建立物件 方法

之前做的都是獲取特性物件,都是查元資料的資訊,現在我們可以通過反射開始動態的去建立物件和方法 1.兩種呼叫無參建構函式的方法 建立乙個democlass,裡面有無參建構函式和有參建構函式 public class democlass public int age public democlass p...

C 實現反射 根據類名動態建立物件

和網上大多數實現一樣,這裡也是採用工廠方法來實現物件的動態建立。大致原理為,建立乙個單例工廠類,其中維護乙個map 類名 物件建立函式 建立物件時,傳入類名,然後根據此類名查詢出建立函式,最後建立物件。採用這種方式,有乙個關鍵問題,便是在工廠中註冊類名。我們的辦法是針對於每乙個類 class 定義乙...

c 反射機制 用類名作變數,動態建立物件

從建立物件的角度上來看,狹義的說,比如有個 class a 你能直接 new a 來建立 物件。但是如果想根據字串 a 來建立 class a 的物件,比如 使用 new a 的形式來建立 物件,甚至 a 是個變數。str a new str.這種把 class 作為變數,又能在執行時建立物件的機制...