問題:當一件產品尚未面世,即在某些情況下,我們不知道他的**。
現在,我們定義的**變數為decimal型別,如果此型別是引用型別的話,我們只需要使用null來表示未知的**。
但是,decimal為值型別,問題多少有些複雜。
此種情況在c#1.0的解決方法,有三種:
1、圍繞decimal建立乙個引用型別包裝器。【這個如何建立?】
2、維護乙個單獨的boolean標識,它表示**是否已知;
3、使用乙個「魔數」(magic value)(比如decimal.minvalue)來表示未知的**。
很明顯,3種方案都不是很好。
在c#2.0,3.0中有一種很好的方法來解決這個問題:
即屬性宣告改為如下即可:
decimal? price;
public decimal? price
private set
}
將建構函式的引數也改為decimal? 這樣一來,就可以將null值作為闡述傳遞進來,或者在類中直接將price賦值為null。
即對值型別宣告時,附加乙個? 即可將值型別變為可空型別。
深入理解C 第一章(C 開發的進化史)
在寫之前,這本書已經看啦一邊,但是一知半解的,網上也沒有找到相關資料,寫這個系列是為了這次搞清楚這本書以及深入了解一些c 的語言特性,記錄一些自己的理解。c 1 唯讀屬性,弱型別集合 c 2 私有屬性賦值方法,強型別集合 c 3 自動實現屬性,增強的集合和物件初始化 c 4 用命名實參更清晰地呼叫建...
深入理解 c 第一章 c 3 顯示未知價格的產品
class displayproductswithunknownprice 跟 return p.price null 匿名方法 作用是一樣的 public string name public decimal?price?表示可以將null 的值傳過來,null含義 從 不指向任何物件的乙個特殊引...
第一章 資料的機器層次表示
1 無符號數 整個機器字長的全部二進位制位均表示數值位 有符號數 二進位制數的最高位為符號位,0表示正號,1表示符號 1 原碼 數值部分與真值相同 2 補碼 負數時,補碼為原碼自低位向高位,維數的第乙個1及其右部的0保持不變,左部的各位取反,符號位保持不變 3 反碼 與補碼的區別是少加乙個1 補碼負...