使用 . 创建类型的实例很简单Activator.CreateInstance(Type)
。
编辑由于某种原因,我虽然你可以只传递类型名称 - 你不能;感谢乔恩指出这一点。
但是您需要Type
从类型名称中获取。如果类型名称始终是完全限定的(至少到程序集名称) - 那么您可以简单地使用:
Type t = Type.GetType(typeName);
但是,如果找不到类型,则会引发异常。你可能会更好:
Type t = Type.GetType(typeName, false);
接着:
object result = null;
if(t != null)
result = Activator.CreateInstance(t);
结束编辑
但是,在某些情况下,该类型可能没有默认构造函数,在这种情况下,您要么必须跳过它(要么从 捕获异常Activator.CreateInstance
,要么先对构造函数进行反射搜索),要么找到构建依赖项的方法类型也一样(也Activator.CreateInstance
支持带参数的构造函数-@Jon 的答案包括一个链接)。
我不相信(Type)
我在这里建议的这个简单的重载适用于具有所有可选参数的构造函数的类型,或者:
public class MyClass {
public MyClass(string p1 = null, int p2 = 10, ...) { }
}
//...
var o = Activator.CreateInstance(typeof(MyClass)); //<-- will fail
因为这不是默认构造函数 - 由编译器将这些构造函数绑定为默认值,方法是将所有默认值提取到对“扩展”版本的调用中。