第 3 講:初識(shí) C# 概念(二)——補(bǔ)充
我們繼續(xù)學(xué)習(xí)上一節(jié)沒有說到的內(nèi)容。
Part 1 標(biāo)識(shí)符(Identifier)
標(biāo)識(shí)符是一個(gè)我們可以直接寫到代碼里,且是我們自定義的詞語、編譯器也不管你的符號(hào)。在上一節(jié)的代碼里,System
、Program
、Main
均屬于標(biāo)識(shí)符。
可能你會(huì)問我,System
、Main
這些單詞不是固定的嗎?是的,但你改成別的東西之后,編譯器并不會(huì)認(rèn)為有問題;相反,其它依賴于這些符號(hào)的地方才會(huì)產(chǎn)生錯(cuò)誤信息,但本身 System
和 Main
這些符號(hào)并不會(huì)影響什么。這些我們稱為標(biāo)識(shí)符。標(biāo)識(shí)的識(shí)讀作 zhì,即和“標(biāo)志”讀音一致。
1-1 標(biāo)識(shí)符命名規(guī)則
為了編譯器可以識(shí)別和認(rèn)定一個(gè)自定義的詞語是一個(gè)標(biāo)識(shí)符,我們有如下的約定:
由數(shù)字、字母、下劃線組合構(gòu)成;
第一個(gè)字符不能是數(shù)字,但可以是字母和下劃線,且還可以是原義符號(hào)
@
;當(dāng)你想使用關(guān)鍵字的寫法作為標(biāo)識(shí)符的時(shí)候,需要在單詞前面追加原義符號(hào),其它的情況,原義符號(hào)則可有可無。原義符號(hào)只能有一個(gè),且只能放在最開始。
這個(gè)規(guī)定我不知道你能否理解。比如說,Program
就是一個(gè)正確的標(biāo)識(shí)符、Main
也是、System
也是。另外,在 C# 里,namespace
是一個(gè)關(guān)鍵字,但你又確實(shí)想把 namespace
作為標(biāo)識(shí)符來使用的話,需要追加原義符號(hào),即改寫成 @namespace
,編譯器就知道這個(gè)是一個(gè)叫 namespace 的標(biāo)識(shí)符了。
寫成語法格式就是:
標(biāo)識(shí)符可以用在自定義的命名空間上、方法名上、類名上,等等其它的地方。你現(xiàn)在學(xué)到的程序,由于沒有數(shù)據(jù)類型,因此無法詳細(xì)介紹。下一節(jié)我們就會(huì)進(jìn)入數(shù)據(jù)類型這一節(jié)內(nèi)容;那么那個(gè)時(shí)候,你就可以使用自定義的標(biāo)識(shí)符作為變量來使用了。
1-2 標(biāo)識(shí)符命名規(guī)范
前面說到了命名規(guī)則,它們是強(qiáng)制性的規(guī)定,必須要滿足的。下面我們來說一下軟性規(guī)定。這種規(guī)定不需要你一定滿足,但希望你滿足。
標(biāo)識(shí)符有四種基本的命名規(guī)則:
駝峰命名法(camelCase)
帕斯卡命名法(PascalCase)
匈牙利命名法(typeCase)
蛇命名法(snake_case)
其中匈牙利命名法需要配合類型作為介紹,因此我們這里就不作說明了。
checkWhetherThatGirlIsBeautiful
。第一個(gè)單詞 check
的首字母是小寫的,而后續(xù)的單詞,首字母全部是大寫的。
帕斯卡命名法和駝峰命名法只差一點(diǎn):第一個(gè)單詞的首字母也得大寫。所以帕斯卡命名法的話,前面這個(gè)標(biāo)識(shí)符就得寫成 CheckWhetherThatGirlIsBeautiful
。
最后,蛇命名法需要把所有單詞全部小寫,然后單詞之間用下劃線分隔,那么就得是 check_whether_that_girl_is_beautiful
這樣的。
在 C# 里,我們一般對(duì)命名空間、方法名使用帕斯卡命名法。也就是說,我們一般是見不到小寫開頭的命名空間名稱,也一般見不到小寫開頭的方法名。前面的 Main
方法(我們叫主方法)的 M 也是大寫的。學(xué)習(xí)過 C 語言的朋友應(yīng)當(dāng)知道,C 語言里的 main 函數(shù)(主函數(shù))是小寫起頭的。C# 是大寫起頭,因此需要注意。
標(biāo)識(shí)符在 C# 里起著重要的意義。標(biāo)識(shí)符是大小寫敏感(Case Sensitive)的,因而 main 和 Main 是兩個(gè)不同的標(biāo)識(shí)符。
Part 2 縮進(jìn)(Indenting)
縮進(jìn)并非是 C# 首創(chuàng)。C 語言里,縮進(jìn)就已經(jīng)存在了??s進(jìn)指的是代碼里沒有執(zhí)行意義的那些空格。舉個(gè)例子:
在這段代碼里,第 5 行(internal class Program
)前面有 4 個(gè)空格。為了保證代碼層級(jí)關(guān)系很清晰,我們寫代碼需要添加這樣的空白來保證代碼更好看。比如上面這樣寫代碼,我們就可以清晰地知道,namespace Project
包含了 Program
以及里面的這些東西;而 internal class Program
則又包含了 Main
以及里面的東西;Main
方法則又包含了里面的執(zhí)行邏輯(輸出一行文字到屏幕上)。
縮進(jìn)在劃分層級(jí)關(guān)系的時(shí)候相當(dāng)有用??瞻鬃址遣黄鸬綀?zhí)行意義的,但對(duì)我們理解代碼來說,非常有意義。
一般來說,縮進(jìn)分空格(Space)和制表符(Tab)兩種,比如例子里,縮進(jìn)就采用了空格作為縮進(jìn)字符。你也可以用制表符,不過并不建議你混用兩種字符類型,因?yàn)榭崭窈椭票矸际恰翱床灰姟钡?,混用可能?huì)導(dǎo)致代碼出現(xiàn)隱藏的問題。
制表符就是你鍵盤上左起第一列里寫了“Tab”字樣的按鍵。按下這個(gè)按鍵,就會(huì)自動(dòng)插入一個(gè)制表符。一個(gè)制表符的長(zhǎng)度相當(dāng)于 8 個(gè)空格;但在代碼里,一般相當(dāng)于 4 個(gè)空格的長(zhǎng)度。所以如果插入空格的話,需要按 4 下空格按鍵,這樣就可以插入 4 個(gè)空格,和一個(gè)制表符長(zhǎng)度相同。
Part 3 注釋(Comment)
可以從英文名里面看出,注釋用的是一個(gè)叫做 comment 的單詞。comment 原本的意思是評(píng)論(當(dāng)然,現(xiàn)如今很多日本朋友也會(huì)把 comment 理解成彈幕的意思,雖然日語的 danmaku 也是彈幕)。這里我們使用“評(píng)論”這層釋義。
我們可以對(duì)代碼里的任何地方插入注釋。注釋里可以寫上任何我們想寫的話,來作為這行代碼(或這段代碼)的解釋說明或者是評(píng)論。舉個(gè)例子:
其中,所有以 //
和 ///
開頭的部分,全部稱為注釋。C# 的注釋一共有四種:
單行注釋(
//
開頭);多行注釋(以
/*
開頭,以*/
結(jié)尾,這兩個(gè)東西可以不在同一行。這兩個(gè)東西包裹起來的所有部分都是注釋);經(jīng)典文檔注釋(
/**
開頭,以*/
結(jié)尾,和多行注釋用法完全一樣,只是把開頭的/*
改成/**
而已);C# 專用文檔注釋(
///
開頭的單行注釋文字)。
單行注釋以 //
起頭,只要寫了這個(gè)起頭的標(biāo)記,后面的所有東西都會(huì)被認(rèn)為是注釋文字??梢詮氖纠锟闯?,注釋文字是隨便寫的,不需要遵循任何 C# 代碼的語法規(guī)則,它完全可以是一句英語,甚至寫中文也是可以的。這就是注釋的一大特殊用途:注釋文字是隨便寫什么都可以的,因?yàn)榫幾g器知道是注釋,因而它們并不參與編譯和程序的運(yùn)行。
而多行注釋和單行注釋用法完全一樣,也是起到補(bǔ)充說明代碼的具體邏輯用的。只是用到了 /*
和 */
作為定界符,因此從這一點(diǎn)來說,它和單行注釋不一樣。
一般來說,我們都不怎么用多行注釋;相反,單行注釋用得很多。即使是占據(jù)多行文字,我們也會(huì)每一行都加上 //
來寫單行注釋,這樣整體看起來就是一個(gè)多行注釋了:
比如這樣。
文檔注釋我們會(huì)在“類”的內(nèi)容里講到,這里就不說明了(對(duì)于我們現(xiàn)在的內(nèi)容來說,也沒有什么特殊的意義),因?yàn)檫@里的
summary
這些單詞是固定的,但它們都有特殊意義,因此在這里說明會(huì)顯得很臃腫。
Part 4 總結(jié)
我們把基本的 C# 概念全部給大家介紹了一通。我不知道你能接受多少,但它們?cè)诤罄m(xù)的內(nèi)容里我們還會(huì)提到。如果不怎么記得的話,還可以回來看,所以不必?fù)?dān)心今天的內(nèi)容的難度多大。
實(shí)際上,今天就作為理論學(xué)習(xí)一下就可以,因此不必帶有負(fù)擔(dān)。