C#動態創建類的實例,如果對性能要求不是很高,而且需要動態創建類的實例的時候可以考慮使用以下的方法:
1. 定義兩個類:
// 基類
public class BaseBusiness
{ }
// 子類
public class SampleBusiness : BaseBusiness
{ }
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#反射實例講解
沒有留言:
張貼留言