C#書寫規(guī)范
更新時間:2007年03月09日 00:00:00 作者:
C#書寫規(guī)范
一、命名
對于理解應(yīng)用程序的邏輯流,命名方案是最有影響力的一種幫助。名稱應(yīng)該說明“什么”而不是“如何”。通過避免使用公開基礎(chǔ)實現(xiàn)(它們會發(fā)生改變)的名稱,可以保留簡化復(fù)雜性的抽象層。例如,可以使用 GetNextStudent(),而不是 GetNextArrayElement()。
命名原則是:
選擇正確名稱時的困難可能表明需要進(jìn)一步分析或定義項的目的。使名稱足夠長以便有一定的意義,并且足夠短以避免冗長。唯一名稱在編程上僅用于將各項區(qū)分開。表現(xiàn)力強(qiáng)的名稱是為了幫助人們閱讀;因此,提供人們可以理解的名稱是有意義的。不過,請確保選擇的名稱符合適用語言的規(guī)則和標(biāo)準(zhǔn)。
以下幾點是推薦的命名方法。
1、方法、屬性、變量規(guī)范
避免容易被主觀解釋的難懂的名稱,如方面名 AnalyzeThis(),或者屬性名 xxK8。這樣的名稱會導(dǎo)致多義性。
在面向?qū)ο蟮恼Z言中,在類屬性的名稱中包含類名是多余的,如 Book.BookTitle。而是應(yīng)該使用 Book.Title。
使用動詞-名詞的方法來命名對給定對象執(zhí)行特定操作的例程,如 CalculateInvoiceTotal()。
在允許函數(shù)重載的語言中,所有重載都應(yīng)該執(zhí)行相似的函數(shù)。
只要合適,在變量名的末尾或開頭加計算限定符(Avg、Sum、Min、Max、Index)。
在變量名中使用互補(bǔ)對,如 min/max、begin/end 和 open/close。
鑒于大多數(shù)名稱都是通過連接若干單詞構(gòu)造的,請使用大小寫混合的格式以簡化它們的閱讀。另外,為了幫助區(qū)分變量和例程,請對例程名稱使用 Pascal 大小寫處理 (CalculateInvoiceTotal),其中每個單詞的第一個字母都是大寫的。對于變量名,請使用 camel 大小寫處理 (documentFormatType),其中除了第一個單詞外每個單詞的第一個字母都是大寫的。
布爾變量名應(yīng)該包含 Is,這意味著 Yes/No 或 True/False 值,如 fileIsFound。
在命名狀態(tài)變量時,避免使用諸如 Flag 的術(shù)語。狀態(tài)變量不同于布爾變量的地方是它可以具有兩個以上的可能值。不是使用 documentFlag,而是使用更具描述性的名稱,如 documentFormatType。 (此項只供參考)
即使對于可能僅出現(xiàn)在幾個代碼行中的生存期很短的變量,仍然使用有意義的名稱。僅對于短循環(huán)索引使用單字母變量名,如 i 或 j。
可能的情況下,盡量不要使用原義數(shù)字或原義字符串,如 For i = 1 To 7。而是使用命名常數(shù),如 For i = 1 To NUM_DAYS_IN_WEEK 以便于維護(hù)和理解。
二、代碼書寫規(guī)范
格式化使代碼的邏輯結(jié)構(gòu)很明顯?;〞r間確保源代碼以一致的邏輯方式進(jìn)行格式化,這對于您和你的開發(fā)小組,以及以后維護(hù)源代碼的其他開發(fā)人員都有很大的幫助。
以下幾點是推薦的格式化方法。
建立標(biāo)準(zhǔn)的縮進(jìn)大?。ㄈ缢膫€空格),并一致地使用此標(biāo)準(zhǔn)。用規(guī)定的縮進(jìn)對齊代碼節(jié)。
在發(fā)布源代碼的硬拷貝版本時使用特定的字體以及字號(新宋體、小五號)。
在括號對對齊的位置垂直對齊左括號和右括號,如:
for (i = 0; i < 100; i++)
{
}
也可以使用傾斜樣式,即左括號出現(xiàn)在行尾,右括號出現(xiàn)在行首,如:
for (i = 0; i < 100; i++){
}
無論選擇哪種樣式,請在整個源代碼中使用那個樣式。
沿邏輯結(jié)構(gòu)行縮進(jìn)代碼。沒有縮進(jìn),代碼將變得難以理解,如:
if(expression )
{
//
//此處填寫你的代碼塊;
//
}
if(expression )
{
//
//此處填寫你的代碼塊;
//
}
else
{
//
//此處填寫你的代碼塊;
//
}
縮進(jìn)代碼會產(chǎn)生出更容易閱讀的代碼,如:
if(expression )
{
if(expression )
{
//
//此處填寫你的代碼塊;
//
}
else
{
//
//此處填寫你的代碼塊;
//
}
}
為注釋和代碼建立最大的行長度,以避免不得不滾動源代碼編輯器,并且可以提供整齊的硬拷貝表示形式。
在大多數(shù)運(yùn)算符之前和之后使用空格,這樣做時不會改變代碼的意圖。但是,C++ 中使用的指針表示法是一個例外。
使用空白為源代碼提供結(jié)構(gòu)線索。這樣做會創(chuàng)建代碼“段”,有助于讀者理解軟件的邏輯分段。
當(dāng)一行內(nèi)容太長而必須換行時,在后面換行代碼中要使用縮進(jìn)格式,如下:
string inserString = "Insert Into TableName(username,password,email,sex,address)"
+ "Values('Soholife','chenyp','soholife@sina.com','male','深圳福田')";
只要合適,每一行上放置的語句避免超過一條。例外是 C、C++、C# 或 JScript 中的循環(huán),如 for (i = 0; i < 100; i++)。
編寫 HTML 時,建立標(biāo)準(zhǔn)的標(biāo)記和屬性格式,如所有標(biāo)記都大寫或所有屬性都小寫。另一種方法是,堅持 XHTML 規(guī)范以確保所有 HTML 文檔都有效。盡管在創(chuàng)建 Web 頁時需折中考慮文件大小,但應(yīng)使用帶引號的屬性值和結(jié)束標(biāo)記以方便維護(hù)。
編寫 SQL 語句時,對于關(guān)鍵字使用全部大寫,對于數(shù)據(jù)庫元素(如表、列和視圖)使用大小寫混合。
在物理文件之間在邏輯上劃分源代碼。
將每個主要的 SQL 子句放在不同的行上,這樣更容易閱讀和編輯語句,例如:
SELECT FirstName, LastName
FROM Customers
WHERE State = 'WA'
將大的復(fù)雜代碼段分為較小的、易于理解的模塊。
三、注釋
軟件文檔以兩種形式存在:外部的和內(nèi)部的。外部文檔(如規(guī)范、幫助文件和設(shè)計文檔)在源代碼的外部維護(hù)。內(nèi)部文檔由開發(fā)人員在開發(fā)時在源代碼中編寫的注釋組成。
不考慮外部文檔的可用性,由于硬拷貝文檔可能會放錯地方,源代碼清單應(yīng)該能夠獨立存在。外部文檔應(yīng)該由規(guī)范、設(shè)計文檔、更改請求、錯誤歷史記錄和使用的編碼標(biāo)準(zhǔn)組成。
內(nèi)部軟件文檔的一個難題是確保注釋的維護(hù)與更新與源代碼同時進(jìn)行。盡管正確注釋源代碼在運(yùn)行時沒有任何用途,但這對于必須維護(hù)特別復(fù)雜或麻煩的軟件片段的開發(fā)人員來說卻是無價的。
以下幾點是推薦的注釋方法:
如果用 C# 進(jìn)行開發(fā),請使用 XML 文檔格式,如下面方法的注釋:
/// <summary>
/// 得到某人的年齡
/// </summary>
/// <param name="userName">用戶名</param>
/// <returns>用戶年齡</returns>
public int GetUserAge(string userName)
{
//
//此處寫你的程序代碼
//
}
修改代碼時,總是使代碼周圍的注釋保持最新。
在每個例程的開始,提供標(biāo)準(zhǔn)的注釋樣本以指示例程的用途、假設(shè)和限制很有幫助。注釋樣本應(yīng)該是解釋它為什么存在和可以做什么的簡短介紹。
避免在代碼行的末尾添加注釋;行尾注釋使代碼更難閱讀。不過在批注變量聲明時,行尾注釋是合適的;在這種情況下,將所有行尾注釋在公共制表位處對齊。
避免雜亂的注釋,如一整行星號。而是應(yīng)該使用空白將注釋同代碼分開。
避免在塊注釋的周圍加上印刷框。這樣看起來可能很漂亮,但是難于維護(hù)。
在部署之前,移除所有臨時或無關(guān)的注釋,以避免在日后的維護(hù)工作中產(chǎn)生混亂。
如果需要用注釋來解釋復(fù)雜的代碼節(jié),請檢查此代碼以確定是否應(yīng)該重寫它。盡一切可能不注釋難以理解的代碼,而應(yīng)該重寫它。盡管一般不應(yīng)該為了使代碼更簡單以便于人們使用而犧牲性能,但必須保持性能和可維護(hù)性之間的平衡。
在編寫注釋時使用完整的句子。注釋應(yīng)該闡明代碼,而不應(yīng)該增加多義性。
在編寫代碼時就注釋,因為以后很可能沒有時間這樣做。另外,如果有機(jī)會復(fù)查已編寫的代碼,在今天看來很明顯的東西六周以后或許就不明顯了。
避免多余的或不適當(dāng)?shù)淖⑨專缬哪牟恢饕膫渥ⅰ?nbsp;
使用注釋來解釋代碼的意圖。它們不應(yīng)作為代碼的聯(lián)機(jī)翻譯。
注釋代碼中不十分明顯的任何內(nèi)容。
為了防止問題反復(fù)出現(xiàn),對錯誤修復(fù)和解決方法代碼總是使用注釋,尤其是在團(tuán)隊環(huán)境中。
對由循環(huán)和邏輯分支組成的代碼使用注釋。這些是幫助源代碼讀者的主要方面。
在整個應(yīng)用程序中,使用具有一致的標(biāo)點和結(jié)構(gòu)的統(tǒng)一樣式來構(gòu)造注釋。
用空白將注釋同注釋分隔符分開。在沒有顏色提示的情況下查看注釋時,這樣做會使注釋很明顯且容易被找到。
一、命名
對于理解應(yīng)用程序的邏輯流,命名方案是最有影響力的一種幫助。名稱應(yīng)該說明“什么”而不是“如何”。通過避免使用公開基礎(chǔ)實現(xiàn)(它們會發(fā)生改變)的名稱,可以保留簡化復(fù)雜性的抽象層。例如,可以使用 GetNextStudent(),而不是 GetNextArrayElement()。
命名原則是:
選擇正確名稱時的困難可能表明需要進(jìn)一步分析或定義項的目的。使名稱足夠長以便有一定的意義,并且足夠短以避免冗長。唯一名稱在編程上僅用于將各項區(qū)分開。表現(xiàn)力強(qiáng)的名稱是為了幫助人們閱讀;因此,提供人們可以理解的名稱是有意義的。不過,請確保選擇的名稱符合適用語言的規(guī)則和標(biāo)準(zhǔn)。
以下幾點是推薦的命名方法。
1、方法、屬性、變量規(guī)范
避免容易被主觀解釋的難懂的名稱,如方面名 AnalyzeThis(),或者屬性名 xxK8。這樣的名稱會導(dǎo)致多義性。
在面向?qū)ο蟮恼Z言中,在類屬性的名稱中包含類名是多余的,如 Book.BookTitle。而是應(yīng)該使用 Book.Title。
使用動詞-名詞的方法來命名對給定對象執(zhí)行特定操作的例程,如 CalculateInvoiceTotal()。
在允許函數(shù)重載的語言中,所有重載都應(yīng)該執(zhí)行相似的函數(shù)。
只要合適,在變量名的末尾或開頭加計算限定符(Avg、Sum、Min、Max、Index)。
在變量名中使用互補(bǔ)對,如 min/max、begin/end 和 open/close。
鑒于大多數(shù)名稱都是通過連接若干單詞構(gòu)造的,請使用大小寫混合的格式以簡化它們的閱讀。另外,為了幫助區(qū)分變量和例程,請對例程名稱使用 Pascal 大小寫處理 (CalculateInvoiceTotal),其中每個單詞的第一個字母都是大寫的。對于變量名,請使用 camel 大小寫處理 (documentFormatType),其中除了第一個單詞外每個單詞的第一個字母都是大寫的。
布爾變量名應(yīng)該包含 Is,這意味著 Yes/No 或 True/False 值,如 fileIsFound。
在命名狀態(tài)變量時,避免使用諸如 Flag 的術(shù)語。狀態(tài)變量不同于布爾變量的地方是它可以具有兩個以上的可能值。不是使用 documentFlag,而是使用更具描述性的名稱,如 documentFormatType。 (此項只供參考)
即使對于可能僅出現(xiàn)在幾個代碼行中的生存期很短的變量,仍然使用有意義的名稱。僅對于短循環(huán)索引使用單字母變量名,如 i 或 j。
可能的情況下,盡量不要使用原義數(shù)字或原義字符串,如 For i = 1 To 7。而是使用命名常數(shù),如 For i = 1 To NUM_DAYS_IN_WEEK 以便于維護(hù)和理解。
二、代碼書寫規(guī)范
格式化使代碼的邏輯結(jié)構(gòu)很明顯?;〞r間確保源代碼以一致的邏輯方式進(jìn)行格式化,這對于您和你的開發(fā)小組,以及以后維護(hù)源代碼的其他開發(fā)人員都有很大的幫助。
以下幾點是推薦的格式化方法。
建立標(biāo)準(zhǔn)的縮進(jìn)大?。ㄈ缢膫€空格),并一致地使用此標(biāo)準(zhǔn)。用規(guī)定的縮進(jìn)對齊代碼節(jié)。
在發(fā)布源代碼的硬拷貝版本時使用特定的字體以及字號(新宋體、小五號)。
在括號對對齊的位置垂直對齊左括號和右括號,如:
for (i = 0; i < 100; i++)
{
}
也可以使用傾斜樣式,即左括號出現(xiàn)在行尾,右括號出現(xiàn)在行首,如:
for (i = 0; i < 100; i++){
}
無論選擇哪種樣式,請在整個源代碼中使用那個樣式。
沿邏輯結(jié)構(gòu)行縮進(jìn)代碼。沒有縮進(jìn),代碼將變得難以理解,如:
if(expression )
{
//
//此處填寫你的代碼塊;
//
}
if(expression )
{
//
//此處填寫你的代碼塊;
//
}
else
{
//
//此處填寫你的代碼塊;
//
}
縮進(jìn)代碼會產(chǎn)生出更容易閱讀的代碼,如:
if(expression )
{
if(expression )
{
//
//此處填寫你的代碼塊;
//
}
else
{
//
//此處填寫你的代碼塊;
//
}
}
為注釋和代碼建立最大的行長度,以避免不得不滾動源代碼編輯器,并且可以提供整齊的硬拷貝表示形式。
在大多數(shù)運(yùn)算符之前和之后使用空格,這樣做時不會改變代碼的意圖。但是,C++ 中使用的指針表示法是一個例外。
使用空白為源代碼提供結(jié)構(gòu)線索。這樣做會創(chuàng)建代碼“段”,有助于讀者理解軟件的邏輯分段。
當(dāng)一行內(nèi)容太長而必須換行時,在后面換行代碼中要使用縮進(jìn)格式,如下:
string inserString = "Insert Into TableName(username,password,email,sex,address)"
+ "Values('Soholife','chenyp','soholife@sina.com','male','深圳福田')";
只要合適,每一行上放置的語句避免超過一條。例外是 C、C++、C# 或 JScript 中的循環(huán),如 for (i = 0; i < 100; i++)。
編寫 HTML 時,建立標(biāo)準(zhǔn)的標(biāo)記和屬性格式,如所有標(biāo)記都大寫或所有屬性都小寫。另一種方法是,堅持 XHTML 規(guī)范以確保所有 HTML 文檔都有效。盡管在創(chuàng)建 Web 頁時需折中考慮文件大小,但應(yīng)使用帶引號的屬性值和結(jié)束標(biāo)記以方便維護(hù)。
編寫 SQL 語句時,對于關(guān)鍵字使用全部大寫,對于數(shù)據(jù)庫元素(如表、列和視圖)使用大小寫混合。
在物理文件之間在邏輯上劃分源代碼。
將每個主要的 SQL 子句放在不同的行上,這樣更容易閱讀和編輯語句,例如:
SELECT FirstName, LastName
FROM Customers
WHERE State = 'WA'
將大的復(fù)雜代碼段分為較小的、易于理解的模塊。
三、注釋
軟件文檔以兩種形式存在:外部的和內(nèi)部的。外部文檔(如規(guī)范、幫助文件和設(shè)計文檔)在源代碼的外部維護(hù)。內(nèi)部文檔由開發(fā)人員在開發(fā)時在源代碼中編寫的注釋組成。
不考慮外部文檔的可用性,由于硬拷貝文檔可能會放錯地方,源代碼清單應(yīng)該能夠獨立存在。外部文檔應(yīng)該由規(guī)范、設(shè)計文檔、更改請求、錯誤歷史記錄和使用的編碼標(biāo)準(zhǔn)組成。
內(nèi)部軟件文檔的一個難題是確保注釋的維護(hù)與更新與源代碼同時進(jìn)行。盡管正確注釋源代碼在運(yùn)行時沒有任何用途,但這對于必須維護(hù)特別復(fù)雜或麻煩的軟件片段的開發(fā)人員來說卻是無價的。
以下幾點是推薦的注釋方法:
如果用 C# 進(jìn)行開發(fā),請使用 XML 文檔格式,如下面方法的注釋:
/// <summary>
/// 得到某人的年齡
/// </summary>
/// <param name="userName">用戶名</param>
/// <returns>用戶年齡</returns>
public int GetUserAge(string userName)
{
//
//此處寫你的程序代碼
//
}
修改代碼時,總是使代碼周圍的注釋保持最新。
在每個例程的開始,提供標(biāo)準(zhǔn)的注釋樣本以指示例程的用途、假設(shè)和限制很有幫助。注釋樣本應(yīng)該是解釋它為什么存在和可以做什么的簡短介紹。
避免在代碼行的末尾添加注釋;行尾注釋使代碼更難閱讀。不過在批注變量聲明時,行尾注釋是合適的;在這種情況下,將所有行尾注釋在公共制表位處對齊。
避免雜亂的注釋,如一整行星號。而是應(yīng)該使用空白將注釋同代碼分開。
避免在塊注釋的周圍加上印刷框。這樣看起來可能很漂亮,但是難于維護(hù)。
在部署之前,移除所有臨時或無關(guān)的注釋,以避免在日后的維護(hù)工作中產(chǎn)生混亂。
如果需要用注釋來解釋復(fù)雜的代碼節(jié),請檢查此代碼以確定是否應(yīng)該重寫它。盡一切可能不注釋難以理解的代碼,而應(yīng)該重寫它。盡管一般不應(yīng)該為了使代碼更簡單以便于人們使用而犧牲性能,但必須保持性能和可維護(hù)性之間的平衡。
在編寫注釋時使用完整的句子。注釋應(yīng)該闡明代碼,而不應(yīng)該增加多義性。
在編寫代碼時就注釋,因為以后很可能沒有時間這樣做。另外,如果有機(jī)會復(fù)查已編寫的代碼,在今天看來很明顯的東西六周以后或許就不明顯了。
避免多余的或不適當(dāng)?shù)淖⑨專缬哪牟恢饕膫渥ⅰ?nbsp;
使用注釋來解釋代碼的意圖。它們不應(yīng)作為代碼的聯(lián)機(jī)翻譯。
注釋代碼中不十分明顯的任何內(nèi)容。
為了防止問題反復(fù)出現(xiàn),對錯誤修復(fù)和解決方法代碼總是使用注釋,尤其是在團(tuán)隊環(huán)境中。
對由循環(huán)和邏輯分支組成的代碼使用注釋。這些是幫助源代碼讀者的主要方面。
在整個應(yīng)用程序中,使用具有一致的標(biāo)點和結(jié)構(gòu)的統(tǒng)一樣式來構(gòu)造注釋。
用空白將注釋同注釋分隔符分開。在沒有顏色提示的情況下查看注釋時,這樣做會使注釋很明顯且容易被找到。
您可能感興趣的文章:
相關(guān)文章
Unity登錄注冊時限制發(fā)送驗證碼次數(shù)功能的解決方法
這篇文章主要為大家詳細(xì)介紹了Unity登錄注冊時限制發(fā)送驗證碼次數(shù)功能的解決方案,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-01-01C# HttpClient上傳文件并附帶其它參數(shù)方式
這篇文章主要介紹了C# HttpClient上傳文件并附帶其它參數(shù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11基于C#的socket編程的TCP異步的實現(xiàn)代碼
本篇文章主要介紹了基于C#的socket編程的TCP異步的實現(xiàn)代碼,詳解的講訴了TCP通信異步的實現(xiàn),有興趣的可以了解一下。2016-11-11