版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C#C#編碼規(guī)范文檔編號(hào):文檔信息:C#編碼規(guī)范密級(jí):內(nèi)部版本信息:VI.0編制日期:2009.2.27編制人:審核人:批準(zhǔn)人:批準(zhǔn)日期:
版本修訂記錄序號(hào)簡要說明(變更內(nèi)容和變更范圍)日期變更人1創(chuàng)建2修改頁眉、頁腳、封面、修訂記錄、評(píng)審記錄信息3文檔評(píng)審記錄序號(hào)評(píng)審人角色評(píng)審日期簽字評(píng)審意見目錄TOC\o"1-5"\h\z\o"CurrentDocument"第一章概述 6規(guī)范制定原則 6術(shù)語定義 6文件命名 6第二章代楨卜觀 6\o"CurrentDocument"列寬 7\o"CurrentDocument"換行 72?3 7\o"CurrentDocument"空行 7\o"CurrentDocument"空格 8\o"CurrentDocument"括號(hào) 9第三章ネ姉注釋 11注釋概述 11文檔型注釋 用途 123*3C 13單行注釋及M用途 13オ羊^^^??????*???*?????????*????*????????????*???*???????????????????????????*???*?????????*????*????????????*???*????????????????????14注釋標(biāo)簽 15\o"CurrentDocument"第四章語句聲明 23初も1化 23イ週 23類和接口的聲明 24字段的聲明 25\o"CurrentDocument"第五章命名規(guī)范 265.! 命名概述 26縮寫 28命名空間 29\o"CurrentDocument"類 29特性(Attribute) 31\o"CurrentDocument"參數(shù) 32\o"CurrentDocument"屬性(PROPERTY) 33\o"CurrentDocument"事件 36常量(CONST) 38字段 385>15 …..40\o"CurrentDocument"集合 40\o"CurrentDocument"第六章語句 42每彳—個(gè)語句 42員句 42IF、IF-ELSE、!FELSE-IF語句 43DO-WHILE語句 45SWITCH-CASE語句 46USING塊語句 47GOT〇語句(如果沒有足夠的理由,請不要使用GOT。語句) 48\o"CurrentDocument"第7章 控件命名規(guī)則 49主要控件名簡寫對(duì)照表 49\o"CurrentDocument"附錄1編碼慣例 50\o"CurrentDocument"附錄2異常處理Jg南 60附錄3輔助規(guī)蜂施的1M 64第一章概述規(guī)范制定原則1方便代碼的交流和維護(hù)。2不影響編碼的效率,不與大眾習(xí)慣沖突。3使代碼更美觀、可讀性更好。4使代碼的邏輯更清晰、更易于理解。術(shù)語定義Pascal大小寫將標(biāo)識(shí)符的首字母和后面連接的每個(gè)單詞的首字母都大寫。可以對(duì)三字符或更多字符的標(biāo)識(shí)符使用Pascal大小寫。例如:BackColorCame!大小寫標(biāo)識(shí)符的首字母小寫,而每個(gè)后面連接的單詞的首字母都大寫。例如:backColor匈牙利命名法匈牙利命名法要求在給變量命名時(shí),加上一個(gè)表示變量類型的前綴。例如:strFileName文件命名.文件名遵從Pascal命名法,無特殊情況,擴(kuò)展名/」寫。.使用統(tǒng)一而又通用的文件擴(kuò)展名:C#類.cs第二章代碼外觀列寬一行代碼的長度不要超過120個(gè)字符。換行當(dāng)表達(dá)式超出或即將超出規(guī)定的列寬,遵循以下規(guī)則進(jìn)行換行1、在逗號(hào)后換行。2、在操作符前換行。3、規(guī)則1優(yōu)先于規(guī)則2。當(dāng)以上規(guī)則會(huì)導(dǎo)致代碼混亂的時(shí)候自己采取更靈活的換行規(guī)則。縮進(jìn)縮逬應(yīng)該是每行一個(gè)Tab(4個(gè)空格),不要在代碼中使用Tab字符。VisualStudio.Net設(shè)置:工具ー>選項(xiàng)ー>文本編輯器ー〉C#->制表符->插入空格空行空行是為了將邏輯上相關(guān)聯(lián)的代碼分塊,以便提高代碼的可閱讀性。在以下情況下使用兩個(gè)空行:1、接口和類的定義之間。2、枚舉和類的定義之間。3、類與類的定義之間。在以下情況下使用ー個(gè)空行:1、方法與方法、屬性與屬性之間。
2、方法中變量聲明與語句之間。3、方法與方法之間。4、方法中不同的邏輯塊之間。5、方法中的返回語句與其他的語句之間。6、屬性與方法、屬性與字段、方法與字段之間。7、注釋與它注釋的語句間不空行,但注釋前要空行??崭裨谝韵虑闆r中要使用到空格:L關(guān)鍵字和左括符"("應(yīng)該用空格隔開。如while(true)注意在方法名和左括符て’之間不要使用空格,這樣有助于辨認(rèn)代碼中的方法調(diào)用與關(guān)鍵字。2、多個(gè)參數(shù)用逗號(hào)隔開,每個(gè)逗號(hào)后都應(yīng)加一個(gè)空格。3、除了.之外,所有的二元操作符都應(yīng)用空格與它們的操作數(shù)隔開。一元操作符、++及一與操作數(shù)間不需要空格。如a+=c+d;a=(a+b)/(c*d);while(d++=s++)(n++;}PrintSize("sizeissize+"\n");PrintSize("sizeissize+"\n");4、語句中的表達(dá)式之間用空格隔開。如for(exprl;expr2;expr3)括號(hào)1、左括號(hào)マ’不要緊靠關(guān)鍵字,中間用ー個(gè)空格隔開。2、左括號(hào)與方法名之間不要添加任何空格。3、沒有必要的話不要在返回語句中使用()。如return1花括號(hào)1、左花括號(hào)マ’放于關(guān)鍵字或方法名的下一行并與之對(duì)齊。如if(condition)(}publicintAdd(intx,inty)()2、左花括號(hào)で要與相應(yīng)的右花括號(hào)")"對(duì)齊。3、通常情況下左花括號(hào)"{"單獨(dú)成行,不與任何語句并列一行。4、if、while,d。語句后要使用{},即使{}號(hào)中為空或只有一條語句。如:somevalue=2;)第三章程序注釋3.1注釋概述L修改代碼時(shí),一定要確保注釋能真實(shí)的反映代碼的意思。2、在每個(gè)方法的開始,提供標(biāo)準(zhǔn)的注釋樣本以指示方法的用途。3、避免在代碼行的末尾添加注釋;行尾注釋使代碼更難閱讀。不過在批注變量聲明時(shí),行尾注釋是合適的;4、避免雜亂的注釋,如一整行星號(hào)。而是應(yīng)該使用空白將注釋同代碼分開。5、避免在塊注釋的周圍加印刷框。6、在部署發(fā)布之前,移除所有臨時(shí)或無關(guān)的注釋,以避免在日后的維護(hù)工作中產(chǎn)生混亂。7、如果需要用注釋來解釋復(fù)雜的代碼節(jié),請檢查此代碼以確定是否應(yīng)該重寫它。盡一切可能不注釋難以理解的代碼,而應(yīng)該重寫它。。8、在編寫注釋時(shí)使用完整的句子,注釋應(yīng)該闡明代碼,而不應(yīng)該增加多義性。9、在編寫代碼時(shí)就注釋,因?yàn)橐院蠛芸赡軟]有時(shí)間這樣做。10、避免多余的或不適當(dāng)?shù)淖⑨?如幽默的不必要的備注。11、使用注釋來解釋代碼的意圖。而不只是說明代碼在干什么。12、代碼中不十分明顯的任何內(nèi)容都需要注釋。13、為了防止問題反復(fù)出現(xiàn),對(duì)錯(cuò)誤修復(fù)和解決方法代碼總是使用注釋,尤其是在團(tuán)隊(duì)環(huán)境中。14、對(duì)由循環(huán)和邏輯分支組成的代碼使用注釋。這些是幫助源代碼讀者的主15、在整個(gè)應(yīng)用程序中,使用具有一致的標(biāo)點(diǎn)和結(jié)構(gòu)的統(tǒng)ー樣式來構(gòu)造注釋。16、用空白將注釋同注釋分隔符分開。在沒有顏色提示的情況下查看注釋時(shí),這樣做會(huì)使注釋很明顯且容易被找到。17、在所有的代碼修改處加上修改標(biāo)識(shí)的注釋。18,為了使層次清晰,在閉合的右花括號(hào)后注釋該閉合所對(duì)應(yīng)的起點(diǎn)。namespaceLangchao.Procument.Web|}//namespaceLangchao.Procument.Web文檔型注釋及其用途該類注釋采用.Net已定義好的Xml標(biāo)簽來標(biāo)記,在聲明接口、類、方法、屬性、字段都應(yīng)該使用該類注釋,以便代碼完成后直接生成代碼文檔,讓別人更好的了解代碼的實(shí)現(xiàn)和接口。如〃/〈summary〉MyMethodisamethodintheMyClassclass.///<para>Here'showyoucouldmakeasecondparagraph〃/<seecref="System.Console.WriteLineH/>///forinformationaboutoutputstatements.///</para>///<seealsocref="MyClass.Main"/>///</summarypublicstaticvoidMyMethod(intInti))類c注釋及其用途該類注釋用于1不再使用的代碼。2臨時(shí)測試屏蔽某些代碼。/*[修改標(biāo)識(shí)][修改原因]...(thesourcecode)7單行注釋及其用途該類注釋用于!方法內(nèi)的代碼注釋。如變量的聲明、代碼或代碼段的解釋。注釋示例:/Z注釋語句privateintnumber;2方法內(nèi)變量的聲明或花括號(hào)后的注釋,注釋示例:statement;}〃alwaystrue注釋模板類和接口的注釋:///<summary>IIIDescription:采集主進(jìn)程主窗體,可以控制采集主進(jìn)程的開啟/關(guān)閉.IIIAuthor:///CreateDateTime:///UpdateHistory:///</summary>方法的注釋:///<summary>///描述方法的功能III<remark>IIIAuthor:///CreateDateTime:///UpdateHistory:///</remark>///</summary>///<paramname=Msender"></param
Ill<paramname=Me"></param>II!(returns〉啟動(dòng)是否成功的標(biāo)記〈/returns〉其它對(duì)象的命名請參考VisualStudio自帶的規(guī)范.3.6 注釋標(biāo)簽標(biāo)簽用法作用<c>>錯(cuò)誤!超獻(xiàn)引用無效。<Z〇text希望將其指示為代碼的文本。為您提供了一種將說明中的文本標(biāo)記為代碼的方法。使用<code>將多行指示為代碼<para><para〉鐲浜./超轉(zhuǎn)變引用制し</para>content段落文本。用于諸如〈remarks〉或<returns>等標(biāo)記內(nèi),使您得以將結(jié)構(gòu)添加到文本中。<param><paramname二’錯(cuò)誤!超鏈接引用無效。>>錯(cuò)誤!超鏈接引用忌^。</param>name為方法參數(shù)名。將此名稱用單引號(hào)括起來(’’)。應(yīng)當(dāng)用于方法聲明的注釋中,以描述方法的ー個(gè)參數(shù)。<paramref><paramrefname="錯(cuò)誤!超鏈接引用無效?"/>name<paramref>標(biāo)記為您提供了一種指示詞為參數(shù)的方法。可以處理XML文件,從而用某種獨(dú)特的方法格式化該參數(shù)。
要引用的參數(shù)名。將此名稱用雙引號(hào)括起來<see><see錯(cuò)誤!超鏈接引用無效。錯(cuò)誤!超鏈接引用無效。"member"/>cref="member1'對(duì)可以通過當(dāng)前編譯環(huán)境逬行調(diào)用的成員或字段的引用。編譯器檢查到給定代碼元素存在后,將member傳遞給輸出XML中的元素名。必須將member括在雙引號(hào)("")中。使您得以從文本內(nèi)指定鏈接。使用<seealso>指示希望在"請參閱"ー節(jié)中出現(xiàn)的文本。<seealso><seealso錯(cuò)誤!超鏈接引用無效。錯(cuò)誤!超鏈接引用無效。"member"/>cref="member1'對(duì)可以通過當(dāng)前編譯環(huán)使您得以指定希望在“請參閱"一節(jié)中出現(xiàn)的文本。使用<see>從文本
境進(jìn)行調(diào)用的成員或字段的引用。編譯器檢查到給定代碼元素存在后,將member傳遞給輸出XML中的元素名。必須將member括在雙引號(hào)("")中<example>(example〉錨岸,超瞬引用磁。</example>description代碼示例的說明。使用〈example〉標(biāo)記可以指定使用方法或其他庫成員的示例。一般情況下,這將涉及到<code>標(biāo)記的使用。<code><code>縦,超瞬引用雙&</code>content為希望將其標(biāo)記為代碼的文本。記為您提供了一種將多行指示為代碼的方法。使用<c〉指示應(yīng)將說明中的文本標(biāo)記為代碼<summary><summary>^^,超錫妾引用秘?</summary>此處description為對(duì)象的摘要。應(yīng)當(dāng)用于描述類型成員。使用<remarks>以提供有關(guān)類型本身的信息。
<exception><exception錯(cuò)誤!超鏈接引用無效。錯(cuò)誤!超鏈接引用無效。"member">錯(cuò)誤!超鏈接引用極,</exception>cref="member1'對(duì)可從當(dāng)前編譯環(huán)境中獲取的異常的引用。編譯器檢查到給定異常存在后,將member轉(zhuǎn)換為輸出XML中的規(guī)范化元素名。必須將member括在雙引號(hào)(一)中。description說明。<exception>標(biāo)記使您可以指定類能夠引發(fā)的異常。<include>(includefile='錯(cuò)誤!超鏈接引用無效。,path=1縦./超鏈接引用え丸[@錯(cuò)誤!超鏈接引用柏丸="錯(cuò)誤!超鏈接引用林"]'/>filename包含文檔的文件名。該文件名可用路徑加以限定。將<include>標(biāo)記使您得以引用描述源代碼中類型和成員的另一文件中的注釋。這是除了將文檔注釋直接置于源代碼文件中之外的另一種可選方法。<include>標(biāo)記使用XMLXpath語法。有關(guān)自定義<include>使用的方法,請參閱Xpath文檔。
filename括在單引號(hào)中(’’)。Tagpath:filename中指向標(biāo)記名的標(biāo)記路徑。將此路徑括在單引號(hào)中(’’)。name注釋前邊的標(biāo)記中的名稱說明符;名稱具有一個(gè)id。id位于注釋之前的標(biāo)記的id,將此id括在雙引號(hào)中("つ.<list><listtype="bullet"|"number"|"table"><listheader>〈term>鐲奧./超鏈接引用秘?</term><description>錯(cuò)誤!超雌引用無效。</description><listheader>塊用于定義表或定義列表中的標(biāo)題行。定義表時(shí),只需為標(biāo)題中的項(xiàng)提供ー個(gè)項(xiàng)。列表中的每ー項(xiàng)用<item>塊指定。創(chuàng)建定義列表時(shí),既需要指定term也需要指定textV但是,對(duì)于表、項(xiàng)目符號(hào)列表或編號(hào)列表,只需為text提供ー個(gè)項(xiàng)。列表或表所擁有的<item>塊數(shù)可以根據(jù)需要而定。
</listheader><item>(term>錯(cuò)誤!超躡引用無效。</term><description>錯(cuò)誤!超峰引用無效。</description></item></list>term定義的項(xiàng),該項(xiàng)將在text中定義。description目符號(hào)列表或編號(hào)列表中的項(xiàng)或者term的定義。<permission><permission錯(cuò)誤!超鏈接引用無效。錯(cuò)誤!超鏈接引用無效。"membet1'>錯(cuò)誤!超鏈接引用冠丸</permission><permission>標(biāo)記使您得以將成員的訪問記入文檔。System.Security.PermissionSet使您得以指定對(duì)成員的訪問。
cref="member1'對(duì)可以通過當(dāng)前編譯環(huán)境逬行調(diào)用的成員或字段的引用。編譯器檢查到給定代碼元素存在后,將member轉(zhuǎn)換為輸出XML中的規(guī)范化元素名。必須將member括在雙引號(hào)("ッ中。description成員的訪問的說明。<remarks>(remarks〉錯(cuò)誤./超鉢接引用無效.</remarks>description成員的說明。<remarks>標(biāo)記是可以指定有關(guān)類或其他類型的概述信息的位置。<summary>是可以描述該類型的成員的位置。<returns><returns>接引用無效.</returns>description返回值的<returns>標(biāo)記應(yīng)當(dāng)用于方法聲明的注釋,以描述返回值。
說明。<value> <va\ue>錯(cuò)誤!超鏈接引用總^.</value><value>標(biāo)記使您得以描述屬性。請注意,當(dāng)在VisualStudio.NET開發(fā)環(huán)境中通過代碼向?qū)砑訉傩詴r(shí),它將會(huì)為新屬性添加property-description<summary>標(biāo)記。然后,應(yīng)該手動(dòng)屬性的說明。添加<value>標(biāo)記以描述該屬性所表示的值。第四章語句聲明每行聲明數(shù)一行只建議作一個(gè)聲明,并按字母順序排列。如intlevel; 〃推薦intsize; 〃推薦intx,y; 〃不推薦初始化建議在變量聲明時(shí)就對(duì)其做初始化。イ週變量建議置于塊的開始處,不要總是在第一次使用它們的地方做聲明。voidMyMethod(){intinti=0; //beginningofmethodblockif(condition)(intint2=0; //beginningof"if"block不過也有一個(gè)例外for(inti=0;i<maxLoops;i++)避免不同層次間的變量重名,如intcount; ...voidMyMethod()(if(condition)(intcount=0;/Z避免))類和接口的聲明!在方法名與其后的左括號(hào)間沒有イ到可空格。2左花括號(hào)?'{"岀現(xiàn)在聲明的下行并與之對(duì)齊,單獨(dú)成行。3方法間用ー個(gè)空行隔開。字段的聲明不要使用是public或protected的實(shí)例字段。如果避免將字段直接公開給開發(fā)人員,可以更輕松地對(duì)類進(jìn)行版本控制,原因是在維護(hù)二進(jìn)制兼容性時(shí)字段不能被更改為屬性??紤]為字段提供get和set屬性訪問器,而不是使它們成為公共的。get和set屬性訪問器中可執(zhí)行代碼的存在使得可以進(jìn)行后續(xù)改進(jìn),如在使用屬性或者得到屬性更改通知時(shí)根據(jù)需要?jiǎng)?chuàng)建對(duì)象。下面的代碼示例闡釋帶有g(shù)et和set屬性訪問器的私有實(shí)例字段的正確使用。示例:publicclassControl:Component(privateinthandle;publicintHandle(get(returnhandle;第五章命名規(guī)范命名概述名稱應(yīng)該說明"什么"而不是"如何"。例如,可以使用GetNextStudent(),而不是GetNextArrayElement()0命名原則是:選擇正確名稱時(shí)的困難可能表明需要進(jìn)ー步分析或定義項(xiàng)的目的。使名稱足夠長以便有一定的意義,并且足夠短以避免冗長。唯一名稱在編程上僅用于將各項(xiàng)區(qū)分開。表現(xiàn)カ強(qiáng)的名稱是為了幫助人們閱讀;因此,提供人們可以理解的名稱是有意義的。以下幾點(diǎn)是推薦的命名方法。1、避免容易被主觀解釋的難懂的名稱,如方法名AnalyzeThisO,或者屬性名xxK8。這樣的名稱會(huì)導(dǎo)致多義性。2、在類屬性的名稱中包含類名是多余的,如Book.BookTitlea而是應(yīng)該使用Book.Titleo3、只要合適,在變量名的末尾或開頭加計(jì)算限定符(Avg、Sum、Min、Max、!ndex)o4、在變量名中使用互補(bǔ)對(duì),如min/max、begin/end和open/closeo5、布爾變量名應(yīng)該包含!s,這意味著Yes/N?;騎rue/False值,如fileIsFoundo6、即使對(duì)于可能僅出現(xiàn)在幾個(gè)代碼行中的生存期很短的變量,仍然使用有意義的名稱。僅對(duì)于短循環(huán)索引使用單字母變量名,如i或j??赡艿那闆r下,盡量不要使用原義數(shù)字或原義字符串,如for(inti=l;i<=7;i++)8而是使用命名常數(shù),如for(inti=l;i<=NUM-DAYS」N_WEEK;i++)以便于維護(hù)和理解。大小寫規(guī)則大寫對(duì)于由兩個(gè)或者更少字母組成的標(biāo)識(shí)符全部大寫。例如:System.IOSystem.Web.UIF表匯總了大寫規(guī)則,并提供了不同類型的標(biāo)識(shí)符的示例。標(biāo)識(shí)符大/」寫示例類PascalAppDomain枚舉類型PascalErrorLevel枚舉值PascalFatalError事件PascalValueChange異常類PascalWebException注意總是以Exception后綴結(jié)尾。只讀的靜態(tài)字PascalRedValue段接口PascalIdisposable注意總是以I前綴開
始。公有方法PascalToString命名空間PascalSystem.Drawing屬性PascalBackColor公共實(shí)例字段PascalRedValue注意很少使用。屬性優(yōu)于使用公共實(shí)例字段。受保護(hù)的實(shí)例CamelredValue字段注意很少使用。屬性優(yōu)于使用受保護(hù)的實(shí)例字段。私有的實(shí)例字CamelredValue段參數(shù)CameltypeName方法內(nèi)的變量CamelbackColor縮寫1不要將縮寫或縮略形式用作標(biāo)識(shí)符名稱的組成部分。例如,使用GetWindow,而不要使用GetWin02不要使用計(jì)算機(jī)領(lǐng)域中未被普遍接受的縮寫。3在適當(dāng)?shù)臅r(shí)候,使用眾所周知的縮寫替換冗長的詞組名稱。例如,用UI作為UserInterface縮寫,用OLAP作為On-lineAnalyticalProcessing的縮寫。4在使用縮寫時(shí),對(duì)于超過兩個(gè)字符長度的縮寫請使用Pascal大小寫或Camel大小寫。例如,使用HtmIButton或HTMLButtono但是?應(yīng)當(dāng)大寫僅有兩個(gè)字符的縮寫,如,System.IO,而不是Systemイ。。5不要在標(biāo)識(shí)符或參數(shù)名稱中使用縮寫。如果必須使用縮寫,對(duì)于由多于兩個(gè)字符所組成的縮寫要使用Came!大/」寫,雖然這和單詞的標(biāo)準(zhǔn)縮寫相沖突。命名空間L命名空間時(shí)的一般性規(guī)則是使用公司名稱,后跟技術(shù)名稱和可選的功能與設(shè)計(jì),如下所示。CompanyName.TechnologyName[.Feature][.Design]例如:namespaceWAT.PMS 〃廣域公司的生產(chǎn)管理系統(tǒng)namespaceWAT.EDP.Desktop〃廣域公司的企業(yè)數(shù)據(jù)平臺(tái)下的我的桌面模塊2、命名空間使用Pascal大小寫,用逗號(hào)分隔開。3、命名空間和類不能使用同樣的名字。例如,有一個(gè)類被命名為Debug后,就不要再使用Debug作為ー個(gè)名稱空間名。類1、使用Pascal大/」寫。2、用名詞或名詞短語命名類。3、使用全稱避免縮寫,除非縮寫已是ー種公認(rèn)的約定,如URL、HTML4、不要使用類型前綴,如在類名稱上對(duì)類使用C前綴。例如,使用類名稱FileStream,而不是CfileStreamo5、不要使用下劃線字符(_)〇6、有時(shí)候需要提供以字母I開始的類名稱,雖然該類不是接口。只要I是作為類名稱組成部分的整個(gè)單詞的第一個(gè)字母,這便是適當(dāng)?shù)?。例?類名稱Identitystore是適當(dāng)?shù)?。在適當(dāng)?shù)牡胤?使用復(fù)合單詞命名派生的類。派生類名稱的第二個(gè)部分應(yīng)當(dāng)是基類的名稱。例如,ApplicationException對(duì)于從名為Exception的類派生的類是適當(dāng)?shù)拿Q,原因ApplicationException是一種Exceptiono請?jiān)趹?yīng)用該規(guī)則時(shí)進(jìn)行合理的判斷。例如,Button對(duì)于從Control派生的類是適當(dāng)?shù)拿Q。盡管按鈕是ー種控件,但是將Control作為類名稱的一部分將使名稱不必要地加長。接口1、用名詞或名詞短語,或者描述行為的形容詞命名接口。例如,接口名稱Icomponent使用描述性名詞。接口名稱IcustomAttributeProvider使用名詞短語。名稱Ipersistable使用形容詞。2、使用Pascal大/」寫。3、少用縮寫。4、給接口名稱加上字母I前綴,以指示該類型為接口。在定義類7接口對(duì)(其中類是接口的標(biāo)準(zhǔn)實(shí)現(xiàn))時(shí)使用相似的名稱。兩個(gè)名稱的區(qū)別應(yīng)該只是接口名稱上有字母I前綴。5、不要使用下劃線字符(一)。6、當(dāng)類是接口的標(biāo)準(zhǔn)執(zhí)行時(shí),定義這一對(duì)類/接口組合就要使用相似的名稱。兩個(gè)名稱的不同之處只是接口名前有一個(gè)I前綴。以下是正確命名的接口的示例。publicinterfaceIserviceProviderpublicinterfaceIformatable以下代碼示例闡釋如何定義[component接口及其標(biāo)準(zhǔn)實(shí)現(xiàn)Component類。publicinterfaceIcomponent(〃Implementationcodegoeshere.}publicclassComponent:Icomponent(//Implementationcodegoeshere.特性(Attribute)應(yīng)該總是將后綴Attribute添加到自定義屬性類。以下是正確命名的特性類的示例。publicclassObsoleteAttribute)在應(yīng)用特性時(shí),可以不加Attribute后綴.如[Obsolate]PublicvoidMethodA枚舉(Enum)1對(duì)于Enum類型和值名稱使用Pasca!大/」瀉。2少用縮寫。3不要在Enum類型名稱上使用Enum后綴。4對(duì)大多數(shù)Enum類型使用單數(shù)名稱,但是對(duì)作為位域的Enum類型使用復(fù)數(shù)名稱。5總是將FlagsAttribute添加到位域Enum類型。參數(shù)L使用描述性參數(shù)名稱。參數(shù)名稱應(yīng)當(dāng)具有足夠的描述性,以便參數(shù)的名稱及其類型可用于在大多數(shù)情況下確定它的含義。2、對(duì)參數(shù)名稱使用Camel大/」寫。3、使用描述參數(shù)的含義的名稱,而不要使用描述參數(shù)的類型的名稱。開發(fā)エ具將提供有關(guān)參數(shù)的類型的有意義的信息。因此,通過描述意義,可以更好地使用參數(shù)的名稱。少用基于類型的參數(shù)名稱,僅在適合使用它們的地方使用它們。4、不要使用保留的參數(shù)。保留的參數(shù)是專用參數(shù),如果需要,可以在未來的版本中公開它們。相反,如果在類庫的未來版本中需要更多的數(shù)據(jù),請為方法添加新的重載。5、不要給參數(shù)名稱加匈牙利語類型表示法的前綴。以下是正確命名的參數(shù)的示例。TypeGetType(stringtypeName)stringFormat(stringformat,args()Asobject)非私有方法1使用動(dòng)詞或動(dòng)詞短語命名方法。2使用Pascal大小寫。3以下是正確命名的方法的實(shí)例。RemoveAII()GetCharArrayOInvoke()屬性(property)1使用名詞或名詞短語命名屬性。2使用Pascal大小寫。3不要使用匈牙利語表示法。4考慮用與屬性的基礎(chǔ)類型相同的名稱創(chuàng)建屬性。例如,如果聲明名為Color的屬性,則屬性的類型同樣應(yīng)該是Color。以下代碼示例闡釋正確的屬性命名。publicclassSampleClass(publicColorBackColor(〃CodeforGetandSetaccessorsgoeshere.})以下代碼示例闡釋提供其名稱與類型相同的屬性。publicenumColor(//InsertcodeforEnumhere.}publicclassControl(publicColorColorget//Insertcodehere.set//Insertcodehere.以下代碼示例不正確,原因是Color屬性是Integer類型的。publicenumColor//InsertcodeforEnumhere.}publicclassControlpublicintColor//Insertcodehere在不正確的示例中,不可能弓I用Color枚舉的成員。Color.Xxx將被解釋為訪問ー個(gè)成員,該成員首先獲取Color屬性(C#中為int類型)的值,然后再訪問該值的某個(gè)成員(該成員必須是System.Int32的實(shí)例成員)。事件1、對(duì)事件處理程序名稱使用EventHandler后綴。2、指定兩個(gè)名為sender和e的參數(shù)。sender參數(shù)表示引發(fā)事件的對(duì)象。sender參數(shù)始終是object類型的,即使在可以使用更為特定的類型時(shí)也如此。與事件相關(guān)聯(lián)的狀態(tài)封裝在名為e的事件類的實(shí)例中。對(duì)e參數(shù)類型使用適當(dāng)而特定的事件類。3、用EventArgs后綴命名事件參數(shù)類。4、考慮用動(dòng)詞命名事件。5、使用動(dòng)名詞(動(dòng)詞的"ing"形式)創(chuàng)建表示事件前的概念的事件名稱,用過去式表示事件后。例如,可以取消的Close事件應(yīng)當(dāng)具有Closing事件和Closed事件。不要使用BeforeXxx/AfterXxx命名模式。6、不要在類型的事件聲明上使用前綴或者后綴。例如,使用Close,而不要使用〇nClose。7、通常情況下,對(duì)于可以在派生類中重寫的事件,應(yīng)在類型上提供ー個(gè)受保護(hù)的方法(稱為〇nXxx)。此方法只應(yīng)具有事件參數(shù)e,因?yàn)榘l(fā)送方總是類型的實(shí)例。以下示例闡釋具有適當(dāng)名稱和參數(shù)的事件處理程序。publicdelegatevoidMouseEventHandler(objectsender,MouseEventArgse);以下示例闡釋正確命名的事件參數(shù)類publicclassMouseEventArgs:EventArgs(intx;inty;publicMouseEventArgs(intx,inty)(this.x=x;this.y=y;}publicintX(get(returnx;}publicintYgetreturny;)}}常量(const)所有單詞大寫,多個(gè)單詞之間用"一"隔開。如publicconststringPAGE_TITLE="Welcome";字段1、private,protected使用Camel大小寫。2、public使用Pascal大小寫。3、拼寫出字段名稱中使用的所有單詞。僅在開發(fā)人員一般都能理解時(shí)使用縮寫。字段名稱不要使用大寫字母。下面是正確命名的字段的示例。classSampleClassstringurl;stringdestinationllrl;4、不要對(duì)字段名使用匈牙利語表示法。好的名稱描述語義,而非類型。5、不要對(duì)字段名或靜態(tài)字段名應(yīng)用前綴。具體說來,不要對(duì)字段名稱應(yīng)用前綴來區(qū)分靜態(tài)和非靜態(tài)字段。例如,應(yīng)用gー或s_前綴是不正確的。6、對(duì)預(yù)定義對(duì)象實(shí)例使用公共靜態(tài)只讀字段。如果存在對(duì)象的預(yù)定義實(shí)例,則將它們聲明為對(duì)象本身的公共靜態(tài)只讀字段。使用Pascal大小寫,原因是字段是公共的。下面的代碼示例闡釋公共靜態(tài)只讀字段的正確使用。publicstructColor(publicstaticreadonlyColorRed=newColor(OxOOOOFF);publicColor(intrgb)(//Insertcodehere.)publicColor(byter,byteg,byteb)(//Insertcodehere.)publicbyteRedValuereturnColor;}靜態(tài)字段L使用名詞、名詞短語或者名詞的縮寫命名靜態(tài)字段。2、使用Pasca!大/J寫。3、對(duì)靜態(tài)字段名稱使用匈牙利語表示法前綴。4、盡可能使用靜態(tài)屬性而不是公共靜態(tài)字段。集合集合是ー組組合在ー起的類似的類型化對(duì)象,如泛型、堆棧、哈希表、字典和列表,集合的命名建議用復(fù)數(shù)。措詞避免使用與常用的.NET框架命名空間重復(fù)的類名稱。例如,不要將以下任何名稱用作類名稱:System.Collections.Forms或UI0有關(guān).NET框架命名空間的列表,請參閱類庫。另外,避免使用和以下關(guān)鍵字沖突的標(biāo)識(shí)符。AddHandlerAddressOfAliasAndAnsiAsAssemblyAutoBaseBooleanByRefByteByVaiCallCase
CatchCboolCbyteCcharCdateCdecCDblCharCintClassCLngCobjConstCshortCSngCStrCtypeDateDecimalDeclareDefaultDelegateDimDoDoubleEachElseElselfEndEnumEraseErrorEventExitExternalsourceFalseFinalizeFinallyFloatForFriendFunctionGetGetTypeGotoHandlesIfImplementsImportsInInheritsIntegerInterfaceIsLetLibLikeLongLoopMeModModuleMustlnheritMustOverrideMyBaseMyClassNamespaceNewNextNotNothingNotlnheritableNotOverridableObjectOnOptionOptionalOrOverloadsOverridableOverridesParamArrayPreservePrivatePropertyProtectedPublicRaiseEventReadonlyReDimRegionREMRemoveHandlerResumeReturnSelectSetShadowsSharedShortSingleStaticStepStopStringStructureSubSyncLockThenThrowToTrueTryTypeOfUnicodeUntilvolatileWhenWhileWithWithEventsWriteOnlyXorEvalextendsinstanceofpackagevar第六章語句每行一個(gè)語句每行最多包含一個(gè)語句。如a++; 〃推薦b-; 〃推薦a〃不推薦復(fù)合語句復(fù)合語句是指包含"父語句{子語句;子語句;}"的語句,使用復(fù)合語句應(yīng)遵循以下幾點(diǎn)!子語句要縮逬。2左花括號(hào)"{"在復(fù)合語句父語句的下一行并與之對(duì)齊,單獨(dú)成行。3即使只有一條子語句要不要省略花括號(hào)"{}".如while(d+=s++)(n++;}return語句return語句中不使用括號(hào),除非它能使返回值更加清晰。如return;returnmyDisk.size();return(size?size:defaultsize);if、if-else、ifelse-if語句if、if-else、ifelse-if語句使用格式if(condition)(statements;}if(condition)(statements;)else(statements;)if(condition)statements;elseif(condition)statements;)else(statements;}for、foreach語句for語句使用格式for(initialization;condition;update)(statements;}空的for語句(所有的操作都在initialization、condition或update中實(shí)現(xiàn))使用格式for(initialization;condition;update);//updateuseridforeach語句使用格式foreach(objectobjinarray)statements;注意 1在循環(huán)過程中不要修改循環(huán)計(jì)數(shù)器。2對(duì)每個(gè)空循環(huán)體給出確認(rèn)性注釋。while語句while語句使用格式while(condition)(statements;)空的while語句使用格式while(condition);do-while語句do-while語句使用格式do(statements;}while(condition);switch-case語句使用格式switch(condition)(statements;break;statements;break;default:statements;break;)注意:1、語句switch中的每個(gè)case各占一行。2、語句switch中的case按字母順序排列。3、為所有switch語句提供default分支。4、所有的非空case語句必須用break;語句結(jié)束。try-catch語句try-catch語句使用格式try(statements;)catch(Exceptionclasse)(statements;)finally(statements;}using塊語句using塊語句使用格式using(object)statements;goto語句(如果沒有足夠的理由,請不要使用goto語句)goto語句使用格式gotoLabell:statements;Lablel:statements;第フ章 控件命名規(guī)則7.1命名方法控件名簡寫+英文描述,控件名小寫,英文描述首字母大寫。7.2主要控件名簡寫對(duì)照表控件名縮寫控件名縮寫LabelIblTextBoxtxtButtonbtnLinkButtonInkbtnImageButtonimgbtnDropDownListddlListBox1stDataGriddgDataListdlCheckBoxchkCheckBoxListchklsRadioButtonrdoRadioButtonListrdolsImageimgPanelpnlCalendercldAdRotatorarTabletblRequiredFieldValidatorrfvCompareValidatorcvRangeValidatorrvRegularExpressionValidatorrevValidatorSummaryvsCrystalReportViewerrptvew附錄1編碼慣例.避免在ー個(gè)文件中放多個(gè)類,盡量做到ー個(gè)文件只放ー個(gè)類..ー個(gè)文件應(yīng)該只對(duì)ー個(gè)命名空間提供類型。避免在同一文件中有多個(gè)命名空間。.避免文件長度超過500行(除了機(jī)器自動(dòng)產(chǎn)生的代碼)。.避免寫過長的方法,盡量將大方法重構(gòu)成多個(gè)小方法.盡量讓ー個(gè)方法的代碼在50行以內(nèi).5,避免超過5個(gè)參數(shù)的方法。使用結(jié)構(gòu)傳遞多個(gè)參數(shù)。.每行應(yīng)該不超過120個(gè)字符。.不要手工編輯任何機(jī)器生成的代碼。a)如果修改機(jī)器生成的代碼,修改代碼格式和風(fēng)格以符合本編碼標(biāo)準(zhǔn)。b)盡可能采用partia!類以分解出需要維護(hù)的部分。8,避免對(duì)顯而易見的內(nèi)容作注釋。代碼應(yīng)該是自解釋的。由可讀性強(qiáng)的變量和方法組成的好的代碼應(yīng)該不需要注釋。.僅對(duì)操作的前提、內(nèi)在算法等寫文檔。.決不要硬編碼數(shù)值,而總是聲明一個(gè)常量。.僅對(duì)本來就是常量的值使用const修飾符,例如一周的天數(shù)。.避免對(duì)只讀變量使用const修飾符。在此情況下,采用readonly修飾符。publicreadonlyintnumber;publicmyclass(intsomevalue)(number=somevalue;}publicconstintdaysinweek=7;).對(duì)任何假設(shè)采用assert。objectobj=getobject();debug.assert(obj!=null);.如果ー個(gè)類中有很多方法,建議用#region對(duì)方法進(jìn)行合理的分組。.僅捕獲已經(jīng)顯式處理了的異常。.在拋岀異常的catch語句中,總是拋出最初異常以保持最初錯(cuò)誤的堆棧位置。catch(exceptionexception)(messagebox.show(exception.message);throw;//sameasthrowexception;).避免將錯(cuò)誤代碼作為方法的返回值。.避免定義自定義的異常類。.定義自定義異常時(shí):a)從ApplicationException纟微承b)提供自定義的序列化。20,避免在ー個(gè)程序集中有多個(gè)main。方法。.僅對(duì)最需要的類型標(biāo)記為public,其他的標(biāo)記為internal.,.避免采用friend程序集,因?yàn)檫@樣增加了程序集間的耦合度。.避免使用依賴于從特定位置運(yùn)行的程序集的代碼。.避免對(duì)枚舉提供明確的值。//correctpublicenumcolor|red,green,blue)//avoidpublicenumcolor(red=1,green=2,blue=3}.避免對(duì)枚舉指定類型。publicenumcolor:longred,green,blue.if語句總是使用括號(hào),即使它包含一句語句。.避免使用?:條件算符,而是使用if語句.avoidusingthetrinaryconditionaloperator..避免在布爾條件語句中調(diào)用函數(shù)。賦值到局部變量并檢查它們的值。booliseverythingok()〃避免:if(iseverythingok()){...}〃而應(yīng)采用:boolok=iseverythingok();if(ok).總是使用從〇開始的數(shù)組。.總是使用ー個(gè)for循環(huán)顯式地初始化一個(gè)引用類型的數(shù)組。publicclassmyclass(}myclass[]array=newmyclass[100];for(intindex=0;index<array.length;index++)array[index]=newmyclass();.不要提供public或protected成員變量,而是使用屬性。.避免使用new繼承修飾符,而是使用override。.對(duì)非密封類總是將public和protected方法標(biāo)記為virtual。(此條可以不采用.()去掉).除非涉及到互操作,永遠(yuǎn)不要用不安全的代碼。.避免顯式類型轉(zhuǎn)換。使用as算法防護(hù)性地轉(zhuǎn)換類型。dogdog=newgermanshepherd();germanshepherdshepherd=dogasgermanshepherd;if(shepherd!=null){...).類成員有委托時(shí):a)使用前將委托復(fù)制到局部變量,以避免并發(fā)沖突。b)調(diào)用前始終檢查委托是否為空。publicclassmysource(publiceventeventhandlermyevent;publicvoidfireevent()(eventhandlertemp=myevent;if(temp!=null)temp(this,eventargs.empty);.使用components中定義的eventshelper類安全地發(fā)布事件。.總是使用接口。.類和接口中方法和屬性的比例至少是2:L(此條視情況而定.比如實(shí)體類中可以屬性比方法多.).避免使用一個(gè)成員的接口。.努力使每個(gè)接口擁有3-5個(gè)成員。.每個(gè)接口不用超過20個(gè)成員。a)12可能是實(shí)際應(yīng)用的極限了。.避免將事件作為接口成員。.避免使用抽象方法,而是使用接口代替。.在類層次中暴露接口。.優(yōu)先使用明確的接口實(shí)現(xiàn)。.永遠(yuǎn)不要假設(shè)ー種類型支持某個(gè)接口。防護(hù)性地檢查是否支持該接口。sometypeobjl;Imyinterfaceobj2;obj2=objlasimyinterface;if(obj2!=null)obj2.methodl();}else{...).發(fā)布時(shí)可能修改的字符串永遠(yuǎn)不用硬編碼,例如連接字符串。.構(gòu)建一^長字符串時(shí),使用stringbuilder,不要用stringo.避免提供帶結(jié)構(gòu)的方法。a)參數(shù)化的構(gòu)造函數(shù)是鼓勵(lì)使用的。b)可以重載算符。.當(dāng)提供靜態(tài)成員變量時(shí),總是提供ー個(gè)靜態(tài)構(gòu)造函數(shù)。.只要可以用前期綁定就不要用后期綁定。.對(duì)應(yīng)用程序進(jìn)行日志和跟蹤。.除非在switch語句中嬲專,永遠(yuǎn)不要用goto語句。.switch語句中總是使用default用于加斷言。intnumber=somemethod();switch(number)(trace.writeline("case1:");break;trace.writeline("case2:");break;default:debug.assert(false);break;}.除非在構(gòu)造函數(shù)中調(diào)用另ー個(gè)構(gòu)造函數(shù),否則不用使用this。publicclassmyclass(publicmyclass(stringmessage)(}publicmyclass():this("hello")()).除非為了解決調(diào)用基類構(gòu)造函數(shù)時(shí)成員名的沖突,否則不要使用base訪問基類的成員。publicclassdog(publicdog(stringname)(}virtualpublicvoidbark(inthowlong)()publicclassgermanshepherd:dogpublicgermanshepherd(stringname):base(name)(}overridepublicvoidbark(inthowlong)(base.bark(howlong);)).使用泛型的代碼中避免與system.object進(jìn)行類型轉(zhuǎn)換,而是使用限制或as算符。classsomeclass{}〃避免classmyclass(voidsomemethod(tt)(objecttemp=t;someclassobj=(someclass)temp;〃正確classmyclasswheret:someclass(voidsomemethod(tt)(someclassobj=t;)}.泛型接口不要定義限制。接口層的限制通常能用強(qiáng)類型代替。publicclasscustomer{...)〃避免publicinterfaceilistwheret:customer{...)〃正確publicinterfaceicustomerlist:ilist{-}.不要在接口中定義與方法相關(guān)的限制。.在數(shù)據(jù)結(jié)構(gòu)中總是優(yōu)先使用c#泛型。附錄2異常處理指南.及早檢查發(fā)現(xiàn)問題越早,這個(gè)問題就越容易解決。.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)形墊片模具課程設(shè)計(jì)
- 課程設(shè)計(jì)古詩教案模板
- 汽車課程設(shè)計(jì)幼兒園教案
- 荷花課程設(shè)計(jì)簡短
- 鎳鈷礦的社會(huì)經(jīng)濟(jì)效益評(píng)估考核試卷
- 高收縮腈綸相關(guān)行業(yè)投資方案
- 2024專項(xiàng)廣告牌安裝施工協(xié)議版
- 摩托車轉(zhuǎn)讓過戶協(xié)議范文書-摩托車轉(zhuǎn)讓協(xié)議范文書
- 電子商務(wù)跨境貿(mào)易服務(wù)合同
- 2024-2030年豪華鞋行業(yè)市場現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 最新投標(biāo)書密封條
- PCB鍍層與SMT焊接
- 看守所崗位職責(zé)
- 2019年青年英才培養(yǎng)計(jì)劃項(xiàng)目申報(bào)表
- Sentaurus在ESD防護(hù)器件設(shè)計(jì)中的應(yīng)用PPT課件
- 《拋物線焦點(diǎn)弦的性質(zhì)探究》學(xué)案
- 人教版小學(xué)二年級(jí)數(shù)學(xué)上冊全冊教案【表格式】
- 佛山嶺南新天地項(xiàng)目概況.
- 噴碼機(jī)操作手冊
- 會(huì)計(jì)學(xué)-上海汽車集團(tuán)股份有限公司應(yīng)收賬款管理內(nèi)部控制問題研究論文
- 甘肅省普通高中畢業(yè)生登記表
評(píng)論
0/150
提交評(píng)論