如何使用反射动态实例化一个类型?

时间:2011-03-31 00:03:24

标签: c# reflection

我需要使用反射动态地实例化一个C#类型。这是我的场景:我正在编写一个基类,它需要将某个对象实例化为其初始化的一部分。基类不知道它应该实例化的对象类型,但派生类将会。所以,我希望派生类在base()调用中将类型传递给基类。代码看起来像这样:

public abstract class MyBaseClass
{
    protected MyBaseClass(Type myType)
    {
         // Instantiate object of type passed in 
         /* This is the part I'm trying to figure out */
    }
}

public class MyDerivedClass : MyBaseClass
{
    public MyDerivedClass() : base(typeof(Whatever))
    {
    }
}

换句话说,基类委托其派生类型选择要实例化的对象类型。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:54)

尝试Activator.CreateInstance(Type)

http://msdn.microsoft.com/en-us/library/wccyzw83.aspx

答案 1 :(得分:19)

您正在寻找Activator.CreateInstance

object instance = Activator.CreateInstance(myType);

此方法有各种重载可以使用构造函数参数或其他信息来查找类型(例如字符串形式的名称)

答案 2 :(得分:15)

您可能希望使用泛型:

public abstract class MyBaseClass<T> where T : new()
{
    protected MyBaseClass()
    {
        T myObj = new T();
         // Instantiate object of type passed in 
         /* This is the part I'm trying to figure out */
    }
}

public class MyDerivedClass : MyBaseClass<Whatever>
{
    public MyDerivedClass() 
    {
    }
}

where T : new()需要支持new T()构造。