【发布时间】:2010-11-13 09:13:29
【问题描述】:
我有一个对象 o 和一个类型 T。我想在运行时使用反射将对象 o 更改为类型 T 而无需实例化它。
编译时的等价物是:
Dim p as Point = Nothing
我知道如何在运行时使用 Activator.CreateInstance 创建一个实例,相当于:
Dim p as New Point()
但我不想这样做。我不知道该类型的构造函数参数,并且某些类型没有无参数构造函数。例如。字体。
所以,总而言之,我想要一种执行相当于的方式:
Dim o as T = Nothing
如果您想知道我为什么要这样做,那是因为我在表单上使用 PropertyGrid 来编辑类型。如果这是第一次编辑字体,例如,将未初始化的字体传递给 PropertyGrid 会使网格显示默认值。
干杯。
预计到达时间:
我尝试了“o = GetUninitializedObject(T)”,但 PropertyGrid 要么想要一个正确初始化的对象,要么想要一个具有已定义类型的对象,设置为空。
我实际上已经在这里解决了我的特殊问题:
how-to-use-the-property-grid-in-a-form-to-edit-any-type
,但我仍然想知道如何在不使用包装类的情况下在运行时分配类型(我很幸运能够使用它)。
【问题讨论】:
标签: vb.net object runtime types casting