使用C#“动态”关键字进行实例化

时间:2011-07-24 01:13:55

标签: c# reflection dynamic instantiation keyword

我已经看过很多这个工具的例子,它抽象出了反射的繁琐语法。但是没有一个证明未知类型的实例化。假设“动态”无法做到这一点是否安全?

3 个答案:

答案 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