2010-01-03 52 views
2

如果我從一個值類型聲明一個可爲空的值(通過Nullable或?符號),它是否仍然遵守值類型的規則(即,默認通過值傳遞,當它超出範圍時解除分配,而不是垃圾收集器運行)還是它變成一個引用類型,因爲它實際上是Nullable類型的?C#可爲空的變量仍然作爲值類型嗎?

+2

您是否嘗試過自己測試這些東西? – 2010-01-03 03:24:30

回答

3

是的,System.Nullable是一個通用的Struct,即值類型。

+0

我並不是以一種批判的方式來表達它,但我認爲一些參考文獻會有幫助,就像雅各所做的那樣。他們可能會引導讀者更深入的信息,使他能夠與其他問題進行一些聯繫等等。 – lmsasu 2010-01-03 12:41:28

+2

我傾向於只提供文章,不能訪問使用谷歌我感覺幸運的功能。提供谷歌結果編號1的鏈接是無意義的練習。 – 2010-01-03 13:29:26

1

可爲空的值類型本質上只是一個值類型的結構包裝,它允許將它們標記爲null。

是這樣的:

struct Nullable<T> 
{ 
    public T Value; 
    public bool HasValue; 
} 

我相信它實際上比這更復雜的引擎蓋下,編譯器確實很多不錯的東西給你,讓你可以寫例如if(myInt == null)。但是,是的,它們仍然是價值類型。

7

的文檔是在這裏:

http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx

正如你所看到的,文檔描述爲「可空結構」,這表明它是值類型。此外,該文檔還給出了該類型聲明的第一行:

public struct Nullable<T> where T : struct, new() 

再次顯示該類型是值類型。