天天看點

可空類型(C Sharp)

1.      Int ?  num = null;

2.      可空類型的來源

可空類型(C Sharp)

3.      可空類型的定義:

可空類型(C Sharp)

代碼參見檔案夾裡的Demo。

代碼的運作結果:

可空類型(C Sharp)

介紹兩個方法:

1.      Nullable<T>.GetValueOrDefault方法(不帶參數)

其傳回值:

自己了解的傳回值:

傳回目前值或者預設值0。

2.      Nullable<T>.GetValueOrDefault(T)方法(帶參數)

可空類型(C Sharp)

其傳回值:

可空類型(C Sharp)
可空類型(C Sharp)

自己了解的傳回值:

傳回目前值或者預設值T。

3.      Nullable<T>.GetHashCode方法

可空類型(C Sharp)

傳回值:

如果HasValue的屬性為真,則傳回對象的哈希代碼。如果為假的,則傳回0。

4.      可空類型的裝箱和拆箱

值類型存在裝箱和拆箱的過程,可空類型也屬于值類型,進而也有裝箱和拆箱的過程的。

裝箱指的的從值類型到引用類型的過程,拆箱當然也就是裝箱的反過程,即從引用類型到值類型的過程。

(這裡進一步解釋下我了解的裝箱和拆箱,首先.Net中值類型是配置設定在堆棧上的,然而引用類型配置設定在托管堆上,裝箱過程就是把值類型的值從推棧上拷貝到托管堆上,然後推棧上存儲的是對托管堆上拷貝值的引用,然而拆箱就是把托管堆上的值拷貝到堆棧上.簡單一句話概況,裝箱和拆箱就是一個值的拷貝的一個過程,就想搬家一樣,把東西從一個地方搬到另一個地方,對于深入的了解,大家可以參考下園中的博文.)。

5.   可空類型的裝箱和拆箱

當把一個可空類型賦給一個引用類型變量時,此時CLR 會對可空類型(Nullable<T>)對象進行裝箱處理,首先CLR會檢測可空類型是否為null,如果為null,CLR則不進行實際的裝箱操作(因為null可以直接賦給一個引用類型變量),如果不為null,CLR會從可空類型對象中擷取值,并對該值進行裝箱(這個過程就是值類型的裝箱過程了。),當把一個已裝箱的值類型賦給一個可空類型變量時,此時CLR會對已裝箱的值類型進行拆箱處理,如果已裝箱值類型的引用為null,此時CLR會把可空類型設為null。

代碼詳見檔案裡的Demo1:

主函數如下:

可空類型(C Sharp)

子函數如下:

定義可空類型的變量:

可空類型(C Sharp)

獲得可空對象的類型:

可空類型(C Sharp)

将可空類型裝箱操作:

可空類型(C Sharp)

裝箱後的引用類型的類型:(依然是整形32bit)

可空類型(C Sharp)

拆箱為非可空變量:

可空類型(C Sharp)

拆箱為可空變量:

可空類型(C Sharp)

裝箱為一個沒有值的可空類型的對象:

可空類型(C Sharp)

拆箱為可空變量:

6.      程式運作結果:

可空類型(C Sharp)

繼續閱讀