第一章 C 的進化史 表示產品的未知價格

2021-06-04 16:39:26 字數 588 閱讀 8319

問題:當一件產品尚未面世,即在某些情況下,我們不知道他的**。

現在,我們定義的**變數為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 補碼負...