收集最實用的網(wǎng)頁特效代碼! c#代碼的外觀和操作方式與c++和java非常類似。初看起來,其語法可能比較混亂,不像書面英語和其他語言。但是,在c#編程中,使用的樣式是比較清晰的,不用花太多的力氣就可以編寫出可讀性很強的代碼。
與其他語言的編譯器不同,無論代碼中是否有空格、回車符或tab字符(這些字符統(tǒng)稱為空白字符),c#編譯器都不考慮這些字符。這樣格式化代碼時就有很大的自由度,但遵循某些規(guī)則將有助于使代碼易于閱讀。
c#代碼由一系列語句組成,每個語句都用一個分號來結(jié)束。因為空格被忽略,所以一行可以有多個語句,但從可讀性的角度來看,通常在分號的后面加上回車符,這樣就不能在一行上放置多個語句了。但一句代碼放在多個行上是可以的(也比較常見)。
c#是一個塊結(jié)構(gòu)的語言,所有的語句都是代碼塊的一部分。這些塊用花括號來界定("{" 和 "}"),代碼塊可以包含任意多行語句,或者根本不包含語句。注意花括號字符不需要附帶分號。
所以,簡單的c#代碼塊如下所示:
{
<code line 1, statement 1>;
<code line 2, statement 2>
<code line 3, statement 2>;
}
其中<code line x, statement y>部分并不是真正的c#代碼,而是用這個文本作為c#語句的占位符。注意在這段代碼中,第2、3行代碼是同一個語句的一部分,因為在第2行的末尾沒有分號。
在這個簡單的代碼塊中,還使用了縮進格式,使c#代碼的可讀性更高。這不是我的發(fā)明,而是一個標(biāo)準(zhǔn)規(guī)則,實際上在默認(rèn)情況下vs會自動縮進代碼。一般情況下,每個代碼塊都有自己的縮進級別,即它向右縮進了多少。代碼塊可以互相嵌套(即塊中可以包含其他塊),而被嵌套的塊要縮進得多一些。
{
<code line 1>;
{
<code line 2>;
<code line 3>;
}
<code line 4>;
}
前面代碼的續(xù)行通常也要縮進得多一些,如上面第一個示例中的第3行代碼。
注釋:
在能通過tools | options訪問的vs options對話框中,顯示了vs用于格式化代碼的規(guī)則。在text editor | c# | formatting節(jié)點的子目錄下,包含了完整的格式化規(guī)則。此處的大多數(shù)設(shè)置都反映了還沒有講述的c#部分,但如果以后要修改設(shè)置,以更適合自己的個性化樣式,就可以回過頭來看看這些設(shè)置。在本書中,為了簡潔起見,所有的代碼段都使用默認(rèn)設(shè)置來格式化。
記住,這種樣式并不是強制的。但如果不使用它,讀者在閱讀本書時會很快陷入迷茫之中。
在c#代碼中,另一個常見的語句是注釋。注釋并不是嚴(yán)格意義上的c#代碼,但代碼最好有注釋。注釋就是解釋,即給代碼添加描述性文本(用英語、法語、德語、外蒙古語等),編譯器會忽略這些內(nèi)容。在開始處理比較長的代碼段時,注釋可用于給正在進行的工作添加提示,例如“這行代碼要求用戶輸入一個數(shù)字”,或“這段代碼由bob編寫”。c#添加注釋的方式有兩種。可以在注釋的開頭和結(jié)尾放置標(biāo)記,也可以使用一個標(biāo)記,其含義是“這行代碼的其余部分是注釋”。在c#編譯器忽略回車符的規(guī)則中,后者是一個例外,但這是一種特殊情況。
要使用第一種方式標(biāo)記注釋,可以在注釋的開頭加上“/*”,在末尾加上“*/”。這些注釋符號可以在單獨一行上,也可以在不同的行上,注釋符號之間的所有內(nèi)容都是注釋。注釋中惟一不能輸入的是“*/”,因為它會被看作注釋結(jié)束標(biāo)記。所以下面的語句是正確的。
/* this is a comment */
/* and so...
... is this! */
但下面的語句會產(chǎn)生錯誤:
/* comments often end with "*/" characters */
注釋結(jié)束符號后的內(nèi)容("*/"后面的字符)會被當(dāng)作c#代碼,因此產(chǎn)生錯誤。
另一個添加注釋的方法是用“//”開始一個注釋,其后可以編寫任何內(nèi)容,只要這些內(nèi)容在一行上即可。下面的語句是正確的:
// this is a different sort of comment.
但下面的語句會失敗,因為第二行代碼會解釋為c#代碼:
// so is this,
but this bit isn't.
這類注釋可用于語句的說明,因為它們都放在一行上:
<a statement>; // explanation of statement
前面說過有兩種方法給c#代碼添加注釋。但在c#中,還有第三類注釋,嚴(yán)格地說,這是//語法的擴展。它們都是單行注釋,用三個"/"符號來開頭,而不是兩個。
/// a special comment
在正常情況下,編譯器會忽略它們,就像其他注釋一樣,但可以配置vs,在編譯項目時,提取這些注釋后面的文本,創(chuàng)建一個特殊格式的文本文件,該文件可用于創(chuàng)建文檔說明書。具體內(nèi)容見第28章。
特別要注意的一點是,c#代碼是區(qū)分大小寫的。與其他語言不同,必須使用正確的大小寫形式輸入代碼,因為簡單地用大寫字母代替小寫字母會中斷項目的編譯。
如果讀者對c#語言沒有什么了解,就很難理解這一點,看看下面這行代碼,它在第2章的第一個示例中使用:
console.writeline("the first app in beginning c# programming!");
c#編譯器能理解這行代碼,因為console.writeline()命令的大小寫形式是正確的。但是,下面的語句都不能工作:
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!");
這里使用的大小寫形式是錯誤的,所以c#編譯器不知道我們要做什么。
幸好,vs在代碼的輸入方面提供了許多幫助,在大多數(shù)情況下,它都知道(程序也知道)我們要做什么。在輸入代碼的過程中,vs會推薦用戶可能要使用的命令,并盡可能糾正大小寫問題。
c#控制臺應(yīng)用程序的基本結(jié)構(gòu)
下面看看第2章的控制臺應(yīng)用程序示例(consoleapplication1),研究一下它的結(jié)構(gòu)。其代碼如下所示:
using system;
using system.collections.generic;
using system.text;
namespace consoleapplication1
{
class program
{
static void main(string[] args)
{
// output text to the screen.
console.writeline("the first app in beginning c# programming!");
console.readkey();
}
}
}
可以立即看出,上一節(jié)討論的所有語法元素這里都有。其中有分號、花括號、注釋和適當(dāng)?shù)目s進。
目前看來,代碼中最重要的部分如下所示:
static void main(string[] args)
{
// output text to the screen.
console.writeline("the first app in beginning c# programming!");
console.readkey();
}
在運行控制臺應(yīng)用程序時,就運行這段代碼,更準(zhǔn)確地說,是運行花括號中的代碼塊。如前所述,注釋行不做任何事情,包含它們只為了簡潔而已。其他兩行代碼在控制臺窗口中輸出了一些文本,并等待一個響應(yīng)。但目前我們還不需要關(guān)心它的具體機制。
這里要注意一下如何實現(xiàn)上一章介紹的代碼突出顯示功能,雖然這對于windows應(yīng)用程序來說比較重要,但它是一個非常有用的特性。要實現(xiàn)該功能,需要使用#region和#endregion關(guān)鍵字,來定義可以擴展和收縮的代碼區(qū)域的開頭和結(jié)尾。例如,可以修改為consoleapplication1生成的代碼,如下所示:
#region using directives
using system;
using system.collections.generic;
using system.text;
#endregion
這樣就可以把這些代碼行收縮為一行,以后要查看其細(xì)節(jié)時,可以再次擴展它。這里包含的using語句和其下的namespace語句在本章的后面解釋。
注釋:
以#開頭的任意關(guān)鍵字實際上都是一個預(yù)處理指令,嚴(yán)格地說并不是c#關(guān)鍵字。除了這里描述的#region和#endregion關(guān)鍵字之外,其他關(guān)鍵字都相當(dāng)復(fù)雜,用法也比較專業(yè)。所以,這是一個讀者通讀全書后才能探究的主題。
現(xiàn)在不必考慮示例中的其他代碼,因為本書前幾章僅解釋c#的基本語法,至于應(yīng)用程序進行console.writeline()調(diào)用的具體方式,則不在我們的考慮之內(nèi)。以后會闡述這些代碼的重要性。