2011-09-28 63 views
0

是否可以動態更改類中的對象類型?.NET中的動態字段類型

說,我有一個過濾器類,指定特定OBJTYPE

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

說的對象列表的過濾條件,當我改變對象的類型,我還想更改類型的MainObjectProperty

說,對於一個Person主要特性可以是Name字符串型),但對於一個Shpere主對象可以是Radius類型)。

我明白我可以使用泛型類,但這不是我想要的。 在真實的類中說我有更多的屬性應該改變,當一個ObjectType的變化,和用戶將使用過濾器應該不擔心MainObjectProperty類型,只是它應該改變對象類型 - 這一切。

回答

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,並根據該對象的類型作出決定。

+0

))我編輯了這篇文章你比我更快))這個想法是'T'是類的用戶不知道的。如果你知道我的意思,那麼這個類應該根據ObjectType來決定它的屬性類型。 – serhio

+0

「您可能必須將其作爲對象存儲,並根據對象的類型作出決定。」我認爲目前的語言限制不會允許比。 – serhio