我已经看到了这个工具的许多例子,它抽象了反射的繁琐语法。但是,没有一个显示未知类型的实例化。是否可以认为这在"动态"中是不可能的?
从逻辑上讲,不可能实例化一个未知的类型——要实例化一个类型,必须知道它是什么。
dynamic
对于操作未知类型的值很有用(通过假设它能够进行某些操作,如果这些操作实际上是不可能的,那么这些操作将在运行时失败)。然而,要实例化任何类型,你要么需要使用编译时实例化(例如使用c#构造函数调用),要么需要一个Type
的实例来对应你想要的类型。
编译器可以使用dynamic关键字使dlr构造一个类型,但是它被设计成稍后绑定构造函数的参数,而不是要构造的类型。开源框架ImpromptuInterface抽象了dlr调用,包括构造函数。如果你需要调用一个有参数的构造函数,这将比使用反射/激活器快5倍。
var x = Impromptu.InvokeConstructor(Type.GetType("SomeType"),args...);
我不知道你的目标是什么…但你是指像
这样的东西吗?dynamic X = Type.GetType("SomeUnknownType").GetConstructor(null).Invoke(null);
?
上面只是调用类型"SomeUnknownType"
的默认(无参数)构造函数,并将结果实例分配给dynamic
。