我有一個抽象類A和實現B和C.我也有一個數據庫,它存儲有關A對象的信息。該表有一個名爲「Name」的列,用於確定是使用數據構造B還是C。使用非默認構造函數創建運行時類型的對象
public abstract class A { }
public class B,C : A
{
public B,C(TableData data)
{
//Do Stuff.
}
}
public class TableData
{
string Name { get; set; }
}
現在,如果名稱是「香蕉」,我希望這可以創建一個B的實例;如果是「胡蘿蔔」我想這對創建C的一個實例:
A myObj = { Reflection? }
當反思莫名其妙採用B或C的構造函數,並指定這個新創建的對象MyObj中。我已經調查使用反射,但大多數方法有允許使用非默認的構造函數是非常複雜的,並採取參數我從來沒有合作過前:
http://msdn.microsoft.com/en-us/library/System.Activator.CreateInstance(v=vs.110).aspx http://msdn.microsoft.com/en-us/library/dd384354.aspx
有沒有更好的如何做到這一點?如果不是,我如何使用第二個鏈接來動態分配這種類型?
如果有一些辦法簡單地做到這一點:
CreateInstance("Namespace.Type", [ ConstructorParam1, ConstructorParam2, ... ])
這就是我所需要的。
謝謝,第二個完美的工作!是否值得它存儲與第一個一起使用的程序集信息,還是使用方法#2檢索它仍然很好嗎? – jokulmorder
@jokulmorder如果你確定它會一直在那個裝配中,那麼第二種方法是好的 –