[英]Activator.CreateInstance() specific class type instance
這個問題是一個除了此之前問到的問題。
我的子類應初始化,而基類將是列表類型
abstract public class baseClass
{
public baseClass()
{
}
}
public class child1 : baseClass
{
public child1() : base
{
}
}
public class child2 : baseClass
{
public child2() : base
{
}
}
我的枚舉和經理班
public enum ClassType
{
child1,
child2
}
public class Manager
{
private List<baseClass> _children;
public void Initialise(ClassType type)
{
var temp = Activator.CreateInstance(null, type.ToString());
//null = assembly which means this assembly
_children.Add(temp);
}
}
經理班級已更新為我上一個問題的建議答案。 但是還是有問題。 在上述情況下,我得到錯誤:TypeLoadException未處理:無法從程序集“ Something”中加載類型為“ child2”的我該如何更改? 我確實嘗試了其他一些選擇,但均未成功。 (有些導致類的創建,但添加時導致nullReferenceException)。
編輯:
好的,我將代碼更改為:
string assemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
Type objType = Type.GetType(string.Format("{0}.{1},{0}", assemblyName, type.ToString()));
var temp = (baseClass)Activator.CreateInstance(objType, 1);
// 1 is the parameter I need to add to the constructor.
_children.Add(temp);
現在我創建了正確的類,但是當我將類添加到列表中時,我得到了NullReferenceException :(
可能沒有找到類型,因為類可能是命名空間。
我的意思是,對於類型名child2
可能不只是child2
而是要SomeNamespace.child2
。
拋開這似乎是一個非常瘋狂的模式,我建議baseClass
在構造函數中使用baseClass
。
由於以下原因,提供的代碼甚至無法按預期進行編譯或工作: Activator.CreateInstance
返回System.Runtime.Remoting.ObjectHandle
而不是實際上創建的類型。 當然,您需要將其baseClass
為baseClass
。
除此之外,如Danilel所建議的那樣,在使用此方法時,您需要提供名稱空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.