1. Int ? num = null;
2. 可空類型的來源
3. 可空類型的定義:
代碼參見檔案夾裡的Demo。
代碼的運作結果:
介紹兩個方法:
1. Nullable<T>.GetValueOrDefault方法(不帶參數)
其傳回值:
自己了解的傳回值:
傳回目前值或者預設值0。
2. Nullable<T>.GetValueOrDefault(T)方法(帶參數)
其傳回值:
自己了解的傳回值:
傳回目前值或者預設值T。
3. Nullable<T>.GetHashCode方法
傳回值:
如果HasValue的屬性為真,則傳回對象的哈希代碼。如果為假的,則傳回0。
4. 可空類型的裝箱和拆箱
值類型存在裝箱和拆箱的過程,可空類型也屬于值類型,進而也有裝箱和拆箱的過程的。
裝箱指的的從值類型到引用類型的過程,拆箱當然也就是裝箱的反過程,即從引用類型到值類型的過程。
(這裡進一步解釋下我了解的裝箱和拆箱,首先.Net中值類型是配置設定在堆棧上的,然而引用類型配置設定在托管堆上,裝箱過程就是把值類型的值從推棧上拷貝到托管堆上,然後推棧上存儲的是對托管堆上拷貝值的引用,然而拆箱就是把托管堆上的值拷貝到堆棧上.簡單一句話概況,裝箱和拆箱就是一個值的拷貝的一個過程,就想搬家一樣,把東西從一個地方搬到另一個地方,對于深入的了解,大家可以參考下園中的博文.)。
5. 可空類型的裝箱和拆箱
當把一個可空類型賦給一個引用類型變量時,此時CLR 會對可空類型(Nullable<T>)對象進行裝箱處理,首先CLR會檢測可空類型是否為null,如果為null,CLR則不進行實際的裝箱操作(因為null可以直接賦給一個引用類型變量),如果不為null,CLR會從可空類型對象中擷取值,并對該值進行裝箱(這個過程就是值類型的裝箱過程了。),當把一個已裝箱的值類型賦給一個可空類型變量時,此時CLR會對已裝箱的值類型進行拆箱處理,如果已裝箱值類型的引用為null,此時CLR會把可空類型設為null。
代碼詳見檔案裡的Demo1:
主函數如下:
子函數如下:
定義可空類型的變量:
獲得可空對象的類型:
将可空類型裝箱操作:
裝箱後的引用類型的類型:(依然是整形32bit)
拆箱為非可空變量:
拆箱為可空變量:
裝箱為一個沒有值的可空類型的對象:
拆箱為可空變量:
6. 程式運作結果: