使用 C# "dynamic"关键字进行实例化



我已经看到了这个工具的许多例子,它抽象了反射的繁琐语法。但是,没有一个显示未知类型的实例化。是否可以认为这在"动态"中是不可能的?

从逻辑上讲,不可能实例化一个未知的类型——要实例化一个类型,必须知道它是什么。

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

相关内容

  • 没有找到相关文章

最新更新