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

我需要使用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)) { } } 

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

有人可以帮忙吗?

试试Activator.CreateInstance(Type)

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

您正在寻找Activator.CreateInstance

 object instance = Activator.CreateInstance(myType); 

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

您可能希望使用generics:

 public abstract class MyBaseClass 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 { public MyDerivedClass() { } } 

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