探索 C# 10 的基于文件的命名空間聲明語(yǔ)句
C# 10 有一個(gè)減少縮進(jìn)的神奇語(yǔ)法:?jiǎn)涡忻臻g聲明。這個(gè)實(shí)際上是模仿了 Java 的 package
的基本語(yǔ)法,為了減少縮進(jìn)就這么干的。
按照道理來(lái)說(shuō),C# 確實(shí)應(yīng)該很早就有這個(gè)特性,因?yàn)?GitHub 上 C# 語(yǔ)法特性討論區(qū)里經(jīng)常有人想要讓 C# 團(tuán)隊(duì)減少這樣的無(wú)意義的縮進(jìn)。但是 C# 設(shè)計(jì)團(tuán)隊(duì)考慮了一些兼容性問(wèn)題因此遲遲沒(méi)有搞這個(gè)。
語(yǔ)法
寫(xiě)法其實(shí)和以前的寫(xiě)法如出一轍,不過(guò)少了一層大括號(hào)。
namespace
這樣確實(shí)要清爽不少。
簡(jiǎn)化版寫(xiě)法不支持嵌套
稍微要注意的地方是,因?yàn)樵谠缙诘?C# 里,命名空間聲明由于有大括號(hào),所以支持嵌套:
不過(guò)在簡(jiǎn)化語(yǔ)法后,這樣的嵌套不再支持。如果你非得這么寫(xiě)代碼,只能使用原始語(yǔ)法(像上面這樣)。
所以,C# 10 里規(guī)定,如果你使用簡(jiǎn)化版的命名空間聲明語(yǔ)句,一個(gè)文件只能有一個(gè) namespace
的聲明,并且必須要放在最開(kāi)頭(僅次于 #define
這些預(yù)處理指令和 using
指令之后)的位置上。比如下面這樣就是不允許的:
一個(gè)文件一旦用了新語(yǔ)法后,就不能使用超過(guò)一個(gè)的命名空間聲明的簡(jiǎn)化寫(xiě)法了。
namespace
和 using
指令的先后順序
接著是 namespace
和 using
指令的混用的寫(xiě)法。
我們一般的順序是先 using
指令,然后是 namespace
指令,然后才是內(nèi)容。因?yàn)?namespace
出現(xiàn)了簡(jiǎn)化版,所以它的長(zhǎng)相更加接近于 using
指令(甚至從語(yǔ)法上,namespace
指令和 using
指令現(xiàn)在只有關(guān)鍵字不同)。所以剛開(kāi)始用會(huì)很不習(xí)慣。一定要注意先 using
指令后才是 namespace
指令。如果反過(guò)來(lái)的話,C# 早期語(yǔ)法的規(guī)范,這種寫(xiě)法是兼容的,但我們一般不那么寫(xiě)。
舉個(gè)例子。
using
指令放在了 namespace
using
放在了 namespace