我想要做的是這樣的。從字符串動態創建對象到派生類型
我有一個繼承樹看起來像這樣
BaseType
BaseType : DerType1
BaseType : DerType2
BaseType : DerType3
所以首先我聲明BaseType
類型的變量使用
BaseType b;
任何派生類型的可以讀作爲字符串
所以我有一個實例創建者的東西像
object o = Activator.CreateInstance(Type.GetType(readValue));
什麼,我那麼想要做的就是這個新對象分配給B
喜歡的東西
b = o //Doesn't work obviously because of casting rules
b= (DerType1)o; //works
,但我無法弄清楚如何動態地重新輸入打算投
b = (o.GetType())o; //what i want but can't be done like this
也許有一種使用泛型的技巧我沒有想過?
我發現了一篇文章談論與泛型
public T GetInstance<T>(string type) where T: new()
{
return (T)Activator.CreateInstance(Type.GetType(typeName));
}
做這樣的東西,但在我看來,我仍然需要在調用靜態引用類型名稱這種方法
b = GetInstance<DerType1>("DerType1")
b = GetInstance<DerType2>("DerType2")
b = GetInstance<DerType3>("DerType3")
感謝您的想法。
也許我應該採取一種全新的,更好的方法? 此外也許我只是不重視作爲
b = (BaseType)Activator.CreateInstance(Type.GetType(typeName));
似乎是有幫助的
您可以直接轉換爲BaseType;您不需要轉換爲最常用的派生類型,以便存儲到BaseType變量。 – 2010-07-23 18:14:25
因爲你所有的類都是從BaseType派生的,並且你的變量是這個類型,所以這個類型的轉換應該使用這個類型來完成,而不是使用特定的子類'b =(BaseType)o;'。我錯過了什麼嗎? – CriGoT 2010-07-23 18:18:13