C IN Depth 第四章 可空型別

2021-10-01 02:01:42 字數 1991 閱讀 6940

乙個byte可以儲存256個值,無法再新增乙個null來表示。如果用2個byte來表示,則會大大增加開銷。所以修好用新建一種型別來表示。

1.魔數

犧牲乙個值來表示空值

2.引用型別包裝

使用object作為變數型別,並根據需要進行裝箱和拆箱。

自定義乙個引用型別b,裡面包含值型別a,並宣告各種轉換。

3.額外的布林標誌

用乙個bool來表示值是否存在

要麼同時維護兩個變數。

要麼封裝到另乙個值型別中。

1.泛型型別,有乙個值型別約束,只能用於值型別

2.可空型別是struct,總是值型別的

3.int?和int可以轉換,乙個隱式,乙個顯示

4.包裝:int=>int?,拆包:int?=>int

1.nullable要麼裝箱成空引用(沒有值),要麼裝箱成t的乙個已裝箱的值(有值)

2.已裝箱的值可以拆箱成普通型別,或者拆箱成對應的可空型別。

3.拆箱乙個空引用時,如果拆箱成普通型別,會異常,拆箱成恰當的可空型別,會拆箱成沒有值的乙個例項

4.在裝箱之後,nullable型別會被解析成int型別

1.first.equals(second)結果

first沒有值,second為null,相等

first沒有值,second不為null,不相等

first有值,second為null,不相等

都有值,且值相等,則相等

var c = nullable.compare(2, 3);

var c = nullable.equals(2, 3);

var c = nullable.getunderlyingtype(a.gettype());

nullable和int?完全等價

c#編譯器允許使用null在比較和賦值時表示乙個可空型別的空值

可空型別可以和null直接進行比較

1.null到t?的隱式轉換

2.t到t?的隱式轉換

3.t?到t的顯示轉換

4.如果允許s到t非可空值的轉換,則:

s?到t?(可能隱式,也可能顯示,取決於原始轉換)

s到t?(可能隱式,也可能顯示,取決於原始轉換)

s?到t(總是顯示的)

5.可空型別操作符一般按照正常的思維邏輯

例外:可空型別的空值 = 可空型別的空值,只能相等,不能小於等於

bool?的邏輯非常規。

考慮步驟:

a & b

1.當a為true時,只有b為ture時,才為true,所有,b為什麼,結果就是什麼

2.當a為false時,一定為false

3.當a為null時,當b為false時,結果為false,其他為null

a | b

1.當a為true時,一定為true

2.當a為false時,取決於b

3.當a為null時,當b為true時,結果為true,其他為null

a ^ b

1.true > false

2.false > true

3.null > null

!a1.true > false

2.false > true

3.null > null

在c# 2之前,as操作符只能用於引用型別。在c# 2中,也可用於可空型別

public void foo(object o)

1.??操作符

??和三目運算子的區別就是:

三目運算子是對if判斷的簡寫,並沒有實際上改變**,而且在理解程度上不一定就比if else要好。三目元算符是判斷乙個表示式。

??是直接判斷是否為null,簡單明瞭。

2.不僅能用於可空型別,也能用於引用型別

3.右結合,乙個表示式可以出現多個??,先從右邊開始計算。

1.將hashtable的鍵值設為null

2.運用在tryparse上

3.多級比較

C in depth 第四章 可空型別

4.1沒有值時怎麼辦 想為datetime變數設為null,但編譯器不允許 乙個商品還沒有賣出,則沒有購買日期 4.1.1為什麼值型別的變數不能為null 對於引用型別的變數來說,其值是乙個引用,而值型別變數的值是它本身的真實資料。可以認為,乙個非空引用值提供了訪問乙個物件的途徑。然而,null相當...

第四章 復合型別

第一題 按示例請求顯示資訊。第二題 修改程式4.4,使用c string類 include include using namespace std int main 第三題 使用char陣列,和cstring中的函式,按示例格式顯示輸出 include include using namespace...

第四章 型別基礎

這章不好理解,我是連抄帶找的。一 system.object 所有型別的基類,也就是所有型別從它派生。公開了幾個方法 equals 判定兩個物件是否具有相同的值 相等性和同一性後續討論 gethashcode tostring 預設返回型別的完整名稱,但是經常會重寫返回表示物件狀態的 string ...