decimal與decimal?的區別

在C#中一些值類型是無法賦值爲null的!這時就有了這種表達形式,如int?x;表示x可經賦值爲null.
但對於這種表示方式有兩種認爲,
decimal?認爲是decimal是一種值類型,而decimal?表示是一種允許賦空值的decimal類型.事實上我們都知道,我們無法對值類型進行賦值null的,也就是說decimal?要賦值爲空值,其必須爲引用類型,至少當decimal爲null的值時是一種引用類型!所以一種認爲是decimal?就是值類型,只不過將decimal特殊化一下,其實decimal?還是decimal,區別就是允許爲空值.另一種認爲decimal是一種完完全全的新類型,因爲在decimal?允許引用賦值,所以decimal?是不同於decimal的一種新的類型,該類型是一種引用類型,而decimal則是一種值類型.事實上decimal?是一種引用類型,它引用了一個具體的decimal,當然它也可以引用爲空,就是說decimal?允許賦值爲null.
當然在理解上可以將decimal?理解成爲一種特殊的decimal類型,只須要知道它要麼是decimal的某一個值,要麼是一個null.這種理解不影響你的使用,但理解的方式是錯的,實際上它是一種新的類型,它在null時是一個空引用,在非null時指向了一個decimal!所以它並非與decimal有關係的!
也就是說decimal是值類型的數值型,而decimal?則是一種引用類型的數值型,這種折中的稱呼還是比較合適的!
對於decimal?a = 0;你可以理解爲將引用類型的a(decimal)賦值爲0!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章