一、null:
1、明義,null是什么意思?
null是指一個變量沒有指向具體對象的有效引用。
這句話什么意思呢?意思就是
1)、能夠使用null修飾的是變量;
2)、主要指的是引用。
那么這就引出一個問題,什么是引用?這么滴的話我們就順便來探討一下C#的數據類型,在C#中,主要數據類型可以分成兩類,那就是值類型和引用類型。值類型就是如int、float等的預定義類型,而引用類型是什么呢?簡單來說就是一個變量具有一個指向堆中一個值的引用,也就是地址。值類型是存放在棧當中的,具有名稱和值,而引用類型不一樣,引用類型在棧中存放的是名稱和一個引用(或者說是地址)指向堆中的值。所以可以理解為引用就是一個指向具體對象值的地址。

因此,我們可以理解了,null意思就是一個類型的變量,該類型是引用類型,這個變量是存在的,但是這個變量暫時還沒有指向哪一個值。
簡單例子就是說在C#中,我們如果聲明一個變量而沒有給它賦值,那么在編譯的時候是會出錯的,因此我們需要給它賦值,這個時候就可以給這個變量賦值null。
2、null的使用范圍:
按照上面的說法,null主要指的就是有沒有引用,因此null主要使用在引用類型、指針類型(指針主要也是引用)、以及一個比較特殊的可空類型。
可空類型從何說起呢?做過項目的話應該知道,在數據表當中是允許一些字段為空的,但是C#又必須為聲明的變量賦值,否則會報錯,如果是引用類型的變量還好辦,不過數據表當中的值類型的字段也是大量存在的,為了解決這個問題,子C#3.0開始就引入了可空類型這一個概念。先直接上圖:

可以發現,第一個是報錯的,而第二條代碼是不報錯的,為什么呢?因為第二條代碼聲明的變量類型是可空的int型,所以可以賦值為null。
3、明確常見的null使用中容易搞混的地方:
1)、賦值為null與不賦值的區別:
上面說過的,主要就是編譯會不會通過的區別。
2)、為string類型的變量賦值為null與賦值為“”的區別:
為string類型的變量賦值為null表示不知道該值是否存在,而賦值為“”說明,該值是有值的,但是值是“,把“”當做一個值就好理解了。舉個生活中的例子就是:
我們收集情報的話,收集到張三的手機號那一欄為null,那說明我們沒有收集到張三手機號的相關信息,而如果那一欄的值是“”,那說明張三沒有手機號。這就是區別。
二、void:
1、明義:
void表示沒有任何類型,沒有任何值。
2、用途
1)、更多的時候感覺void更像是一個指令或者像是一個配置。我們最常見的就是在聲明方法的時候,這個值指示說明該方法不返回任何值。這個是一個用途。
2)、還有一個用途就很少見了,因為C#雖然事實上也有指針,但是我們幾乎不用。說到這里大概就明白了,void還用在指針當中,原話是出自C#本質論第四版:
void出現在指針當中,說明指針指向未知類型的存儲位置。(在這里要道歉撒,博主對於C#當中的指針一竅不通,因此無法進行解釋)。
