2009-07-23 48 views
0

我有一個對象o和一個類型t。我想用反射來改變對象o在運行時輸入T而不需要實例化它。在運行時在vb.net或c中爲對象分配一個類型#

在編譯時當量是:

Dim p as Point = Nothing 

我知道如何使用Activator.CreateInstance來在運行時創建實例,它等同於:

Dim p as New Point() 

但我不」不想這樣做。我不知道類型的構造函數參數,有些類型沒有無參數的構造函數。例如。字體。

所以,綜上所述,我想執行的等價的方式:

Dim o as T = Nothing 

在你想知道爲什麼我做這種情況下,那是因爲我使用的PropertyGrid在窗體上編輯類型。如果這是第一次編輯字體,那麼將未初始化的字體傳遞給PropertyGrid會使網格顯示默認值。

乾杯。

ETA:

我試圖 'O = GetUninitializedObject(T)',但PropertyGrid中任一希望正確初始化對象或對象,具有限定的類型,設置爲無。

其實我已經解決了我在這裏的特殊問題:

how-to-use-the-property-grid-in-a-form-to-edit-any-type

,但我仍然有興趣知道如何分配類型在運行時不使用包裝類(我很幸運可以使用)。

回答

2

最接近的是將o設置爲默認(T)。假設默認值不是Nothing(null),您將獲得默認值,例如Rectangle.Empty或0(int)。

Nothing(null)沒有與之關聯的類型,所以如果o作爲對象,(T)沒有任何幫助。

+0

Dim o as Font = Nothing,是否有與之相關聯的字體類型。我不能直接使用它,但我可以無錯地將它傳遞給PropertyGrid。你能否通過將o設置爲默認值(T)來解釋你的意思。謝謝。 – Jules 2009-07-23 13:33:34

相關問題