繁体   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