我已经看过很多这个工具的例子,它抽象出了反射的繁琐语法。但是没有一个证明未知类型的实例化。假设“动态”无法做到这一点是否安全?
答案 0 :(得分:4)
逻辑上,无法实例化未知类型 - 实例化类型, 必须知道它是什么。
dynamic
对于操作未知类型的值非常有用(假设它能够执行某些操作,如果它们实际上不可能则会在运行时失败)。但是,要实例化任何类型,您需要使用编译时实例化(例如,使用C#构造函数调用),否则您需要一个与您所需类型对应的Type
实例
答案 1 :(得分:2)
编译器可以使用dynamic关键字,以便dlr将构造一个类型,但它的设计是为了后期绑定构造函数的参数而不是要构造的类型。开源框架ImpromptuInterface抽象出dlr calls, including the constructor。如果需要调用具有参数的构造函数,则运行速度比使用reflection / Activator快5倍。
var x = Impromptu.InvokeConstructor(Type.GetType("SomeType"),args...);
答案 2 :(得分:1)
我不知道你的目标是什么......但你的意思是
dynamic X = Type.GetType("SomeUnknownType").GetConstructor(null).Invoke(null);
上面只调用了类型"SomeUnknownType"
的默认(无参数)构造函数,并将结果实例分配给dynamic
。