




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、C#編碼規(guī)范第12/12頁【最新整理,卜載后即可編輯】1程序結(jié)構(gòu)所有源代碼的結(jié)構(gòu)均采用以下順序布局,對于沒有的部分可以省略, 便于閱讀代碼。匕二三三三尋三#rcdon Constant#eridreAion Constant #reAon Members#endreAion Members #rcyion Defaults#cridreAion Defaults #recoil Properties#cnarexion Properties #re$>ion Constructors#cridrexion Constructors #reyjon InterfaceMethods#eri
2、dreAion InterfaceMethods #redon StaticMethods#endreAion StaticMethods #region ()vcrridcMethods#cridreAion OverrideMethods #reAion PrivateMethods#cnarexion PrivateMethods #redon ProtectedMethods#eridreAion ProtectedMethods #redon PublicMethods#enarexion PublicMethods #redon Events#enarexion Events2命名
3、規(guī)則和風(fēng)格類、方法、常量采用Pascal風(fēng)格命名public class SomcClassconst int DefaultSizc = 10();public SomeMcthodO【最新整理,卜載后即可編輯】氣心C#編碼規(guī)范第12/12頁成員變量采用Camel風(fēng)格命名,但前面加一個(gè)底劃線public class SomeClassint _port 二 5000;public SomeMcthodO局部變量和方法參數(shù)采用Camel風(fēng)格命名public class SomeClasspublic SomeMethod(int len)string sLinc; 接口采用I作為前綴命名int
4、erface IMylntcrface(5)自定義屬性類型以Am作為后綴命名自定義異常類型以Ex作為后綴命名采用動名詞命名方法,例如ShowDialogO(8)有返回值的方法的命名應(yīng)該能夠描述其返回值,例如 Gct()bjcctStatc()(9)采用描述性的變量名。a)避免采用單字母的變量名5如i或t;而是采用indux或tempb)對public和protected成員避免采用用匈牙利命名法,如:采用Port 不用 nPort,c)盡量不要采用縮寫(例如將number縮寫為num)(1。)總是使用C#預(yù)定義的類型,而不是使用System命名空間中的別名 例如:采用object不用Objec
5、t采用string不用String采用int不用Int32(11)對于泛型類型采用大寫宇母。當(dāng)處理.NET類型的Type時(shí)保留其后綴Type、pubdc “忽 UnkcdList<K,T>'器目 LinkedList<KeyType,DataType>(12)采用有意義的命名空間名,例如產(chǎn)品名稱或公司名稱(13)避免使用類的全稱,而是采用using聲明(14)避免在命名空間內(nèi)使用using語句(15)把所有系統(tǒng)框架提供的名稱空間組織到一起,把第三方提供的名稱空間放到系統(tǒng)名稱空間的下面kTla Honat CCD , m m m m tetctctc s s s
6、s VJ VJ vy V ssssusinA usinA using usinx usinir MyCompany;using MyControls;(16)使用代理推導(dǎo)而不要顯式的實(shí)例化一個(gè)化代理(C#2.0新特性) delegate void SomcDclctratcO;public void SomcMcthoaOSomcDclcgate somcDclcgatc=SomcMcthod;(17)使用sb縮進(jìn),縮進(jìn)4個(gè)空格(18)總是把花括號“”和“”獨(dú)立放在新的一行(19) 一個(gè)文件名應(yīng)該能夠反映它所對應(yīng)的類名3編碼實(shí)踐1 .避免在同一個(gè)文件中放置多個(gè)類2 .避免在一個(gè)文件內(nèi)寫多于5(
7、)()行的代碼(機(jī)器自動生成的代碼除外)3 避免寫超過25行代碼的方法4 .避免寫超過5個(gè)參數(shù)的方法,如果要傳遞多個(gè)參數(shù),使用結(jié)構(gòu)5 .運(yùn)算符的兩邊均應(yīng)插入一個(gè)空格,便于閱讀代碼6 .注釋時(shí),在注釋符號后面插入一個(gè)空格,便于閱讀代碼/自定義類【最新整理,卜載后即可編輯】public class MyClass)7 .不要手動去修改任何機(jī)器生成的代碼勾如果修改了機(jī)器生成的代碼,修改你的編碼方式來適應(yīng)這個(gè)編 碼標(biāo)準(zhǔn)b)盡可能使用partial classes特性,以提高可維護(hù)性。(C#2.0新特 性)&避免對那些很直觀的內(nèi)容作注釋,代碼本身應(yīng)該能夠解釋其本身的 含義。由可讀的變量名和方法名
8、構(gòu)成的優(yōu)質(zhì)代碼應(yīng)該不需要注釋9 .注釋應(yīng)該只說明操作的一些前提假設(shè)、算法的內(nèi)部信息等內(nèi)容1(). 避免對方法進(jìn)行注釋勾使用充足的外部文檔對API進(jìn)行說明b)只有對那些其他開發(fā)者的提示信息才有必要放到方法級的注釋 中來11 .除了()和1,絕對不要對數(shù)值進(jìn)行硬編碼,通過聲明一個(gè)常量來代 替該數(shù)值12 .只對那些亙古不變的數(shù)值使用const關(guān)鍵宇,例如一周的天數(shù)13 .避免對只讀(read-only)的變量使用const關(guān)鍵宇。在這種情況下,直 接使用readonly關(guān)鍵宇public class MyClasspublic const int DaysInWcek Z1 7;pubic read
9、only int Number;public MyClass(int some Value) Number=someValue;14對每一個(gè)假設(shè)進(jìn)行斷言。平均起來5每5行應(yīng)有一個(gè)斷言usingSvstcm.DiaAiostics;object GctObjectQ ; object somcObjcct = GctObjectQ; Debug.assert(some()bjcct != null);15 .每一行代碼都應(yīng)該以白盒測試的方式進(jìn)行審讀16 .只捕捉那些你自己能夠顯式處理的異常17 .如果在catch語句塊中需要拋出異常,則只拋出該catch所捕捉到的【最新整理,下載后即可編輯】04
10、" C#編碼規(guī)范第12/12頁異常(或基于該異常而創(chuàng)建的其他異常),這樣可以維護(hù)原始錯(cuò)誤所在的堆 棧位置catch(Exccption ex)McssaAeBox.Show(cx.McssaAc); throw; 或 throw exception;18 避免利用返回值作為函數(shù)的錯(cuò)誤代碼19 .避免自定義異常類2() .當(dāng)自定義異常類的時(shí)候a)讓你自定義的異常類從Exception類繼承b)提供自定義的串行化機(jī)制23 .避免friend assemblies,因?yàn)檫@會增加程序集之間的耦合性24 .避免讓你的代碼依賴于運(yùn)行在某個(gè)特定地方的程序集25 .在 application ass
11、embly (EXE client assemblies)中最小化代碼量。使用 類庫來包含業(yè)務(wù)邏輯26 .避免顯式指定枚舉的值public型um Color(、Red,Green,Blue品免r ipublic enum ColorRed = 1, Green = 2, Blue = 329 .避免使用三元條件操作符3().避免利用函數(shù)返回的Boolean值作為條件語句。把返回值賦給一個(gè)局部變量,然后再檢測Bool IsEvurything)K()礙皿0)正確bool ok=IsEver5rthino< )K0;if (ok)31 總是使用以零為基數(shù)的數(shù)組32 .總是使用一個(gè)for循環(huán)顯
12、式的初始化一個(gè)引用成員的數(shù)組public class MyClassconst int ArraySizc= 10();MyClassf array=new MvClass ArravSizc;For (int index=();indcx< array. Length;inacx+) arraylindex=new MyClassO;33 .使甫屬性親替代public或protected類型的成員變量34 .不要使用繼承下來的new操作符,使用override關(guān)鍵宇覆寫new的 實(shí)現(xiàn)37 .避免顯示類型轉(zhuǎn)換。使用as關(guān)鍵字安全的轉(zhuǎn)換到另一個(gè)類型Dog do£y = new G
13、ermanShepherdO ;GermanShepherd shepherd = dog as GermanShepherd;if (shephera != null)38 .在調(diào)用一個(gè)代理前,總是檢查它是否為null39 .不要提供public的事件成員變量。改用Event Accessor Public class MvPublisherMyDclcyAtc m_SomcEvent;Public event MyDcley; ate SomcEventaddm SomcEvcnt+ = value;removem SomcEvcnt-=valuc;)40 .避免定義事件處理代理。使用Ev
14、cntHandler<T>或者GcnericEvcntHandlcr41 .避免顯示觸發(fā)事件。使用EvcntsHelper安全的發(fā)布事件42 .總是使用接口43 .接口和類中方法和屬性的比應(yīng)該在2:1左右44 .避免只有一個(gè)成員的接口45 .努力保證一個(gè)接口有35個(gè)成員46 .不要讓一個(gè)接口中成員的數(shù)量超過2(),而12則是更為實(shí)際的限制47 .避免在接口中包含事件【最新整理,下載后即可編輯】氣心1C#編碼規(guī)范第12/12頁4&當(dāng)使用抽象類的時(shí)候,提供一個(gè)接口49.在類繼承結(jié)構(gòu)中暴露接口5() .推薦使用顯式接口實(shí)現(xiàn)51 .從來不要假設(shè)一個(gè)類型支持某個(gè)接口。在使用前總是要詢
15、問一下 SomcTypu objl;Imylnterfacc obj2;/ Some code to initialize objl,thcn:obj2 二 objl as Imylnterfacc;if(obj2 C null)obj 2.Method 1();else/ Handle erro in expected interface53 .不要硬編碼那些可能會隨發(fā)布環(huán)境變化而變化的字符串,例如數(shù)據(jù) 庫連接字符串54 使用String.Empty取代心/避免 OT。二.;string name Z1 String.Empty;55,使用一個(gè)超過8()宇符禹長宇符串的時(shí)候,使用String
16、Builder代替 string56 .避免在結(jié)構(gòu)中提供方法a)參數(shù)化的構(gòu)造函數(shù)是鼓勵(lì)使用的b)可以重載運(yùn)行符58 .當(dāng)早綁定(early-binding)可能的時(shí)候就盡量不要使用遲綁定(late- binding)59 .讓你的應(yīng)用程序支持跟蹤和日志61 .總在switch語句的default情形提供一個(gè)斷言 int number 二 SomcMcthodO; swith(numbcr)case 1: “"trace.WritcLine( Case 1:)break;case 2: “"trace.Writeline( Case 2:);break;default: dc
17、buA.Assert(falsc); break;【最新整理,下載后即可編輯】C#編碼規(guī)范第12/12頁62 .除了在一個(gè)構(gòu)造函數(shù)中調(diào)用其它的構(gòu)造函數(shù)之外,不要使用this關(guān) 鍵字/ Example of proper use of *this* public class MyClasspublic MyClass(string message) public MyClass():this( CHellon)63 .不要使用base關(guān)鍵字訪問基類的成員,除非你在調(diào)用一個(gè)基類構(gòu)造 函數(shù)的時(shí)候要決議一個(gè)子類的名稱沖突/ Example of proper use of Aase! public c
18、lass Do 乂public DotAstrinA name)( f .virtual public void Bark(int howlonApublic class Germanshcphcrd:DoA;public GcrmanShephcrd(strino ; namc):base(name)override public void Bark(int howLonA base.Bark(howLontA 66.基于Programming .NET components2/e 中第四章的內(nèi)容實(shí)現(xiàn) DisponseO和Finalize。方法67 .總是在unchecked狀態(tài)下運(yùn)行代碼(
19、出于性能的原因),但是為了防止溢出或下溢操作,要果斷地使用cheeked模式Int CalcPower(int numberAint power)int result=l;for (int count=l ;count<=power;count+) checkedresult* 二 number;return result;6&使用條件方法來取代顯式進(jìn)行方法調(diào)用排除的代碼4控件命名4數(shù)據(jù)類型命名數(shù)據(jù)類型數(shù)據(jù)類型簡寫標(biāo)準(zhǔn)命名舉例BooleanbblsPostBackIntegernnRowCountcrLong1IPosSingleffMaxXDoubleddMaxV alucCh
20、arccDclimiterStringssFirstNamcDatcTimedtdtStartDatcBytebvtJbvtPixelV alucJDecimaldecdccAveragcHeightShortshtsht A verageObjectobjobj Return ValueArray后面加SstudentsArrayList前面加arrayarravStudcntJList前面加listlistStudcnt4.2 Win控件命名控件類型控件類型簡寫標(biāo)準(zhǔn)命名舉例LabelIblIblMcssagcLinkLabclllblllblTodayButtonbtnb tnSaveTe
21、xtBoxtxttxtNameMainMcnumnmnFilcMcnultcmmimiFilcOpcnPopupMcnupmpmPrintChcckBoxchkchkStockRadioButtonrdordoSclcctcd【最新整理,下載后即可編輯】jaAC#編碼規(guī)范第12/12頁GroupBoxgbogboMainPicturcBoxpicpiclmagePanelpnlpnlBodyDataGridgrdgrd ViewListBox1stIstProductsCheckedListBox1stIstChcckcdComboBoxcbocboMcnuListVicwIvwIvwBrow
22、surTree ViewtvwtvwTypuTabControlctlctlSegy-InfoTabPageTabtabTracklnfoDatcTimePickcrdtpdtpS tar tD ateHscrollBarhsbhsblmagcVscrollBarvsbvsblmagcTimertimtimCountImageListimgimgListToolBardbtlbManageStatusBarstbstbFootPrintOpenFileDialogdigdlgOpcnSaveFilcDialogdigdlgSaveFoldBrowserDialogdigdlgBrowscrFo
23、ntDialogdigdlgFontColorDialogdigdlgColorPrintDialogdigdlgPrint43 Web控件命名控件類型控件類型簡寫標(biāo)準(zhǔn)命名舉例AdRotatoradrtExampleButtonbtnbtnSubmitCalendarcalcalMcttingDatesChcckBoxchkchkBlueChcckBoxListchklchklFaxAColorsCompare V alidatorvalevale Valid AgeCustomValidatorvalxvalxDBChcckDataGriddgrddgrdTitlesDataListdlstdlstTitlesDropDownListdropdropCountricsHyperLinkInkInkDetailsImageimgimgAuntBettyImagcButtonibtnibtnSubmitLabelIblIblRcsultsLinkButtonIbtnIbtnSubmitListBox1stIstCountricsPanelpnlpnlForm2PiaccHoldcrplhplhFo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度生豬養(yǎng)殖與農(nóng)業(yè)產(chǎn)業(yè)扶貧合作協(xié)議
- 二零二五年度制造業(yè)工傷責(zé)任保險(xiǎn)合同
- 2025年度男方道歉夫妻共同生活保證協(xié)議
- 2025年度飯店短期勞務(wù)合同-客房服務(wù)員職業(yè)健康與安全協(xié)議
- 二零二五年度物業(yè)公司員工勞動合同(含社區(qū)文化活動)
- 監(jiān)理技術(shù)服務(wù)合同
- 綠色數(shù)據(jù)中心建設(shè)運(yùn)營合同
- 環(huán)境影響評估結(jié)果展示表
- 股份制企業(yè)股權(quán)分配與管理制度文書
- 財(cái)務(wù)與成本控制管理細(xì)則
- 酒店幕墻工程單元板塊幕墻軌道吊裝方案
- 裝飾材料與構(gòu)造(共153張PPT)
- 職業(yè)健康安全交底
- GB∕T 28610-2020 甲基乙烯基硅橡膠
- GB∕T 7588.1-2020 電梯制造與安裝安全規(guī)范 第1部分:乘客電梯和載貨電梯
- 4.昆蟲備忘錄 課件(共15張PPT)
- DB37∕T 5191-2021 高延性混凝土加固技術(shù)規(guī)程
- 2022年全省公訴業(yè)務(wù)知識考試參考答案
- 鎮(zhèn)政府(街道辦事處)辦公大樓平面圖
- 軟壓光機(jī)計(jì)算說明
- 森林防火安全責(zé)任書(施工隊(duì)用)
評論
0/150
提交評論