星期五, 1月 18, 2008

C#動態創建類的實例

C#動態創建類的實例: "

C#動態創建類的實例,如果對性能要求不是很高,而且需要動態創建類的實例的時候可以考慮使用以下的方法:

1. 定義兩個類:
// 基類
public class BaseBusiness
{ }

// 子類
public class SampleBusiness : BaseBusiness
{ }

2. 動態創建類的實例

// 程序集名稱
string assemblyName = "abc.Business";
// 類名稱
string className = "SampleBusiness";

// 獲得指定名稱的類型:程序集名稱 + 類名稱
Type type = Type.GetType(assemblyName + "." + className);

// 創建類型的一個實例
object obj = Activator.CreateInstance(type);

// 將實例強制轉換成指定的類型
BaseBusiness curBusiness = (BaseBusiness)obj;

(編輯:IT資訊之家 www.it55.com )


**如何invoke method
續上例
invoke method有兩種,
1.實體化(new一個實體再invoke)

法1. 透過實體直接使用
curBusiness.Invoke(obj,new string[]{"test"}); //test => 字串參數,如果沒有就放null

法2. 透過type取得method
System.Reflection.MethodInfo method = type.GetMethod("go"); //go => method name


2.靜態呼叫(如Math.abs的static物件,不用new)
method = type.GetMethod("MethodtoUpperCase");//有個static的method名稱
string a = (string)method.Invoke(null,new [] object{"lowercase"}); //要傳object陣列型態
p.s 沒有參數,就給null,如同沒有實體的null
==>LOWERCASE


Reference:C#反射實例講解

沒有留言: