上面部落格學習了使用反射檢視型別的資訊,以及使用反射獲取特性物件。
下面使用反射來動態建立物件。首先準備乙個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 作為變數,又能在執行時建立物件的機制...