簡體   English   中英

Activator.CreateInstance()特定的類類型實例

[英]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而不是實際上創建的類型。 當然,您需要將其baseClassbaseClass
除此之外,如Danilel所建議的那樣,在使用此方法時,您需要提供名稱空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM