动态.NET中的字段类型

时间:2011-09-28 14:17:35

标签: .net vb.net

是否可以动态更改类中对象的类型?

说,我有一个Filter类,它指定特定ObjType对象列表的过滤条件

Public Class PropertyFilter
  Public Property ObjectType as MyObjectsTypeEnum
  Public Property MainObjectProperty As ??? OBJECT
End Class

说,当我更改对象类型时,我想更改MainObjectProperty的类型

说,对于Person,主要属性可以是Name字符串类型),但对于Shpere,主要对象可以是Radius }(类型)。

我知道我可以使用泛型类,但这不是我想要的。 在真正的类中说我有更多的属性,当ObjectType更改时应该更改,并且将使用Filter的用户不必担心MainObjectProperty类型,只需要更改Object类型 - 它就是全部。

1 个答案:

答案 0 :(得分:1)

这可能是仿制药的解决方案。这允许您具有类型参数。像这样:

Public Class PropertyFilter(Of T)
    Public Property ObjectType
    Public Property MainObjectProperty As T
End Class

这样,当您创建PropertyFilter时,您可以指定MainObjectProperty是什么,如下所示:

Dim propWithDecimal As New PropertyFilter(Of Decimal)()
Dim propWithString As New PropertyFilter(Of String)()

这不是动态,因为该类型在编译时仍然是已知的。您可以在MSDN了解有关泛型的更多信息。

修改

根据提问者的编辑:

这对我来说听起来有点古怪。你无法在运行时真正改变字段的类型 - 但是有很多方法可以使看起来像这样的行为存在。

您可以使用dynamic并实现自己的DynamicOjbect来实现您的目标,但这也是一些工作。

  

如果你知道我的意思,那么类应该根据ObjectType来决定它的属性类型。

如果是这种情况,您可能需要将其存储为object,并根据对象的类型做出决定。