2011-10-24 34 views
0

如果值類型是對象(我已經看到ValueType確實繼承自Object)爲什麼它們不像Object一樣?它們不能爲空,所以看起來它們沒有參考,並且它們必須被裝箱/拆箱。當作爲參數傳遞時,它們的行爲與原始類似,但由於您可以調用它們的方法,它們似乎也可以作爲參考類型。我讀過它們通常分配在堆棧上,這使得它們再次成爲值類型。就拳擊而言,我看不到int和Integer的Java等價物,只是Int32結構,所以如果Int32被裝箱,它將裝入什麼?.NET基元在值世界中看起來是一半,在參考世界中看起來是一半

總之,如果有人可以解決他們在一個世界上看起來如何一半是另一半,我一定會很感激。

+0

您需要重新校準您的期望值。你似乎相信如果某物是物體,它必須是可空的。這是你的問題。沒有理由爲什麼一個對象必須是可空的。 –

+0

爲什麼你認爲應該有一個相當於Java的int和Integer?這可能是Java語言最愚蠢的設計決定之一! –

回答

1

.NET允許你將值類型的對象,因爲這有利於有一個統一的界面與操作信息(在埃菲爾鐵塔的uniform access principle,影響的設計讀了C#)。 5.ToString()Int32.ToString(5)更有意義,因爲它與OOP範例一致,即使它只是語法糖。

值類型變量在C#2.0和更高可以聲明爲空的語法如下:

在情況下它:

int? myInt; 

更多有關值類型是如何工作的,請http://msdn.microsoft.com/en-us/library/system.valuetype%28v=VS.85%29.aspx細節對於值類型的行爲類似於對象是必要的,使值類型看起來像引用對象的包裝器在堆上分配,並將值類型的值複製到其中。包裝器被標記,所以系統知道它包含一個值類型。