C#代碼的基本語(yǔ)法
與其他語(yǔ)言的編譯器不同,無(wú)論代碼中是否有空格、回車(chē)符或tab字符(這些字符統(tǒng)稱(chēng)為空白字符),C#編譯器都不考慮這些字符。這樣格式化代碼時(shí)就有很大的自由度,但遵循某些規(guī)則將有助于使代碼易于閱讀。
C#代碼由一系列語(yǔ)句組成,每個(gè)語(yǔ)句都用一個(gè)分號(hào)來(lái)結(jié)束。因?yàn)榭崭癖缓雎裕砸恍锌梢杂卸鄠€(gè)語(yǔ)句,但從可讀性的角度來(lái)看,通常在分號(hào)的后面加上回車(chē)符,這樣就不能在一行上放置多個(gè)語(yǔ)句了。但一句代碼放在多個(gè)行上是可以的(也比較常見(jiàn))。
C#是一個(gè)塊結(jié)構(gòu)的語(yǔ)言,所有的語(yǔ)句都是代碼塊的一部分。這些塊用花括號(hào)來(lái)界定("{" 和 "}"),代碼塊可以包含任意多行語(yǔ)句,或者根本不包含語(yǔ)句。注意花括號(hào)字符不需要附帶分號(hào)。
所以,簡(jiǎn)單的C#代碼塊如下所示:
- {
- < code line 1, statement 1>;
- < code line 2, statement 2>
- < code line 3, statement 2>;
- }
其中< code line x, statement y>部分并不是真正的C#代碼,而是用這個(gè)文本作為C#語(yǔ)句的占位符。注意在這段代碼中,第2、3行代碼是同一個(gè)語(yǔ)句的一部分,因?yàn)樵诘?行的末尾沒(méi)有分號(hào)。
在這個(gè)簡(jiǎn)單的代碼塊中,還使用了縮進(jìn)格式,使C#代碼的可讀性更高。這不是我的發(fā)明,而是一個(gè)標(biāo)準(zhǔn)規(guī)則,實(shí)際上在默認(rèn)情況下VS會(huì)自動(dòng)縮進(jìn)代碼。一般情況下,每個(gè)代碼塊都有自己的縮進(jìn)級(jí)別,即它向右縮進(jìn)了多少。代碼塊可以互相嵌套(即塊中可以包含其他塊),而被嵌套的塊要縮進(jìn)得多一些。
- {
- < code line 1>;
- {
- < code line 2>;
- < code line 3>;
- }
- < code line 4>;
- }
前面代碼的續(xù)行通常也要縮進(jìn)得多一些,如上面第一個(gè)示例中的第3行代碼。
注釋?zhuān)?/P>
在能通過(guò)Tools | Options訪(fǎng)問(wèn)的VS Options對(duì)話(huà)框中,顯示了VS用于格式化代碼的規(guī)則。在Text Editor | C# | Formatting節(jié)點(diǎn)的子目錄下,包含了完整的格式化規(guī)則。此處的大多數(shù)設(shè)置都反映了還沒(méi)有講述的C#部分,但如果以后要修改設(shè)置,以更適合自己的個(gè)性化樣式,就可以回過(guò)頭來(lái)看看這些設(shè)置。在本書(shū)中,為了簡(jiǎn)潔起見(jiàn),所有的代碼段都使用默認(rèn)設(shè)置來(lái)格式化。
記住,這種樣式并不是強(qiáng)制的。但如果不使用它,讀者在閱讀本書(shū)時(shí)會(huì)很快陷入迷茫之中。
在C#代碼中,另一個(gè)常見(jiàn)的語(yǔ)句是注釋。注釋并不是嚴(yán)格意義上的C#代碼,但代碼最好有注釋。注釋就是解釋?zhuān)唇o代碼添加描述性文本(用英語(yǔ)、法語(yǔ)、德語(yǔ)、外蒙古語(yǔ)等),編譯器會(huì)忽略這些內(nèi)容。在開(kāi)始處理比較長(zhǎng)的代碼段時(shí),注釋可用于給正在進(jìn)行的工作添加提示,例如“這行代碼要求用戶(hù)輸入一個(gè)數(shù)字”,或“這段代碼由Bob編寫(xiě)”。C#添加注釋的方式有兩種。可以在注釋的開(kāi)頭和結(jié)尾放置標(biāo)記,也可以使用一個(gè)標(biāo)記,其含義是“這行代碼的其余部分是注釋”。在C#編譯器忽略回車(chē)符的規(guī)則中,后者是一個(gè)例外,但這是一種特殊情況。
要使用第一種方式標(biāo)記注釋?zhuān)梢栽谧⑨尩拈_(kāi)頭加上“”。這些注釋符號(hào)可以在單獨(dú)一行上,也可以在不同的行上,注釋符號(hào)之間的所有內(nèi)容都是注釋。注釋中惟一不能輸入的是“*/”,因?yàn)樗鼤?huì)被看作注釋結(jié)束標(biāo)記。所以下面的語(yǔ)句是正確的。
但下面的語(yǔ)句會(huì)產(chǎn)生錯(cuò)誤:
" characters */
注釋結(jié)束符號(hào)后的內(nèi)容("*/"后面的字符)會(huì)被當(dāng)作C#代碼,因此產(chǎn)生錯(cuò)誤。
另一個(gè)添加注釋的方法是用“//”開(kāi)始一個(gè)注釋?zhuān)浜罂梢跃帉?xiě)任何內(nèi)容,只要這些內(nèi)容在一行上即可。下面的語(yǔ)句是正確的:
- // This is a different sort of comment.
但下面的語(yǔ)句會(huì)失敗,因?yàn)榈诙写a會(huì)解釋為C#代碼:
- // So is this,
- but this bit isn't.
這類(lèi)注釋可用于語(yǔ)句的說(shuō)明,因?yàn)樗鼈兌挤旁谝恍猩希?/P>
- < A statement>; // Explanation of statement
前面說(shuō)過(guò)有兩種方法給C#代碼添加注釋。但在C#中,還有第三類(lèi)注釋?zhuān)瑖?yán)格地說(shuō),這是//語(yǔ)法的擴(kuò)展。它們都是單行注釋?zhuān)萌齻€(gè)"/"符號(hào)來(lái)開(kāi)頭,而不是兩個(gè)。
- /// A special comment
在正常情況下,編譯器會(huì)忽略它們,就像其他注釋一樣,但可以配置VS,在編譯項(xiàng)目時(shí),提取這些注釋后面的文本,創(chuàng)建一個(gè)特殊格式的文本文件,該文件可用于創(chuàng)建文檔說(shuō)明書(shū)。具體內(nèi)容見(jiàn)第28章。
特別要注意的一點(diǎn)是,C#代碼是區(qū)分大小寫(xiě)的。與其他語(yǔ)言不同,必須使用正確的大小寫(xiě)形式輸入代碼,因?yàn)楹?jiǎn)單地用大寫(xiě)字母代替小寫(xiě)字母會(huì)中斷項(xiàng)目的編譯。
如果讀者對(duì)C#語(yǔ)言沒(méi)有什么了解,就很難理解這一點(diǎn),看看下面這行代碼,它在第2章的第一個(gè)示例中使用:
- Console.WriteLine("The first app in Beginning C# Programming!");
C#編譯器能理解這行代碼,因?yàn)镃onsole.WriteLine()命令的大小寫(xiě)形式是正確的。但是,下面的語(yǔ)句都不能工作:
- console.WriteLine("The first app in Beginning C# Programming!");
- CONSOLE.WRITELINE("The first app in Beginning C# Programming!");
- Console.Writeline("The first app in Beginning C# Programming!");
這里使用的大小寫(xiě)形式是錯(cuò)誤的,所以C#編譯器不知道我們要做什么。
幸好,VS在代碼的輸入方面提供了許多幫助,在大多數(shù)情況下,它都知道(程序也知道)我們要做什么。在輸入代碼的過(guò)程中,VS會(huì)推薦用戶(hù)可能要使用的命令,并盡可能糾正大小寫(xiě)問(wèn)題。
【編輯推薦】