C#編碼標(biāo)準(zhǔn)
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
命名規(guī)范
1.利用Pascal的方式定義類型、方法名和常量 public class SomeClass 2. 對(duì)于局部變量和方法的參數(shù)使用駱駝命名法{ const int DefaultSize = 100; public SomeMethod() { } } int number; 3. 接口的名稱前面加上Ivoid MyMethod(int someNumber) {} interface IMyInterface 4. 在私有成員變量前面加上m_。對(duì)于m_后面的變量名使用駱駝命名法{ ![]() public class SomeClass 5. 對(duì)自定義的屬性類加上后綴Attribute{ private int m_Number; } 6. 對(duì)自定義的異常類加上后綴Exception 7. 方法的命名使用動(dòng)詞——對(duì)象對(duì)。例如ShowDialog() 8. 有返回值的方法的命名中要有對(duì)返回值的描述。例如GetObjectState() 9. 使用帶有說(shuō)明性的變量名 a)避免單字符的變量名。例如i或t。使用類似于index或temp這樣有意義的名字。 b)對(duì)于public或protected類型的變量避免使用匈牙利表示法 c)不要所寫(xiě)單詞(例如用num取代number) 10. 總是使用c#預(yù)定義的類型而不是使用在System命名空間中的別名。例如: 使用object而不是Object 使用string 而不是String 使用int而不是Int32 11. 在使用泛型的時(shí)候,類型的首字母要大寫(xiě)。當(dāng)處理.NET中的Type類型的時(shí)候,保留Type后綴。 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 13. 避免通過(guò)全限定方式使用類型名稱,使用using關(guān)鍵字。 14. 避免在一個(gè)命名空間中使用using關(guān)鍵字 15. 把所有系統(tǒng)框架提供的命名空間組織到一起,把第三方提供的命名空間放到系統(tǒng)命名空間的下面 16. 使用代理推導(dǎo)而不要顯示的實(shí)例化一個(gè)代理 17. 維護(hù)嚴(yán)格的代碼縮進(jìn)。不要使用tabs或非標(biāo)準(zhǔn)的縮進(jìn),例如一個(gè)空格。推薦的縮進(jìn)市3到4個(gè)空格。 18. 在和你的代碼縮進(jìn)處于同一個(gè)級(jí)別處為該代碼添加注釋 19. 所有的注釋都應(yīng)該通過(guò)拼寫(xiě)檢查。注釋中的錯(cuò)誤拼寫(xiě)意味著開(kāi)發(fā)進(jìn)度的延緩 20. 所有類成員變量應(yīng)該被聲明在類的頂部,并用一個(gè)空行把他們和方法以及屬性的聲明區(qū)分開(kāi) 21. 在最靠近一個(gè)局部變量被使用的地方聲明該局部變量 22. 一個(gè)文件名應(yīng)該能夠反映它所對(duì)應(yīng)的類名 23. 當(dāng)使用一個(gè)部分類并把該類分布到不同的文件中時(shí),在每一個(gè)文件名末尾都加上該文件實(shí)現(xiàn)的部分在類整體中扮演的作用。 24. 總是要把“{”放在新的一行。 編碼實(shí)踐 1. 避免在同一個(gè)文件中放置多個(gè)類 2. 一個(gè)文件應(yīng)該只向在一個(gè)命名空間內(nèi)定義類型。避免在一個(gè)文件中使用多個(gè)命名空間 3. 避免在一個(gè)文件內(nèi)些多余500行的代碼 4. 避免寫(xiě)超過(guò)25行代碼的方法 5. 避免寫(xiě)超過(guò)5個(gè)參數(shù)的方法。如果要傳遞多個(gè)參數(shù),使用結(jié)構(gòu) 6. 一行不要超過(guò)80字符 7. 不要手動(dòng)去修改任何機(jī)器生成的代碼 a)如果修改了機(jī)器生成的代碼,修改你的編碼方式來(lái)死適應(yīng)這個(gè)編碼標(biāo)準(zhǔn) b)盡可能使用partial classes特性,以提高可維護(hù)性 8. 避免對(duì)那些直觀的內(nèi)容作注釋。代碼本身應(yīng)該能夠解釋其自身的含義。由可讀的變量名和方法名構(gòu)成的優(yōu)質(zhì)代碼應(yīng)該不需要注釋。 9. 注釋?xiě)?yīng)該只說(shuō)明操作的一些前提假設(shè)、算法的內(nèi)部信息等內(nèi)容。 10. 避免對(duì)方法進(jìn)行注釋 a)使用充足的外部文檔對(duì)API進(jìn)行說(shuō)明 b)只有對(duì)那些其他開(kāi)發(fā)者的提示信息才有必要放到方法級(jí)的注釋中來(lái) 11. 除了0和1,絕對(duì)不要對(duì)數(shù)值進(jìn)行硬編碼,通過(guò)聲明一個(gè)常量來(lái)代替該數(shù)值 12. 只對(duì)那些亙古不變的數(shù)值使用const關(guān)鍵字,例如一周的天數(shù) 13. 避免對(duì)只讀(read-only)的變量使用const關(guān)鍵字。 14. 對(duì)每一個(gè)假設(shè)進(jìn)行斷言。平均起來(lái),每5行應(yīng)有一個(gè)斷言。 15. 每一行代碼都應(yīng)該以白盒測(cè)試的方式進(jìn)行審讀。 16. 只捕捉那些你自己能夠顯示處理的異常 17. 如果在catch語(yǔ)句塊中需要拋出異常,則只拋出該catch所捕捉到的異常(或基于該異常而創(chuàng)建的其他異常),這樣可以維護(hù)原始錯(cuò)誤所在的堆棧位置。 catch(Exception exception) 18. 避免利用返回值作為函數(shù)的錯(cuò)誤代碼{ MessageBox.Show(exception.Message); throw;//或throw exception; } 19. 避免自定義異常類 20. 當(dāng)自定義異常類的時(shí)候 a)讓你自定義的異常類從Exception類繼承 b)提供自定義的串行化機(jī)制 21. 避免在一個(gè)程序集中定義多個(gè)Main()方法 22. 只把那些絕對(duì)需要的方法定義成public,而其他的方法定義成internal 23. 避免friend assermblies,因?yàn)檫@回增加程序集之間的耦合性 24. 避免讓你的代碼依賴于運(yùn)行在某個(gè)特定地方的程序集 25. 在application assembly中最小化代碼量。使用類庫(kù)來(lái)包含業(yè)務(wù)邏輯 26. 避免顯示指定枚舉的值 //正確 27. 避免為枚舉指定一個(gè)類型public enum Color { Red,Green,Blue } //錯(cuò)誤 public enum Color { Red=1,Green=2,Blue=3 } //避免 28. 對(duì)于if語(yǔ)句,總使用一對(duì){}把下面的語(yǔ)句塊包含起來(lái),哪怕只有一條語(yǔ)句也是如此public enum Color:long { Red,Green,Blue } 29. 避免使用三元條件操作符 30. 避免利用函數(shù)返回的Boolean值作為條件語(yǔ)句。把返回值賦給一個(gè)局部變量,然后再檢測(cè) 31. 總是使用以零為基數(shù)的數(shù)組 32. 總是使用一個(gè)for循環(huán)顯示的初始化一個(gè)引用成員的數(shù)組 33. 使用屬性來(lái)替代public或protected類型的成員變量 34. 不要使用繼承下來(lái)的new操作符,使用override關(guān)鍵字覆寫(xiě)new的實(shí)現(xiàn) 35. 在一個(gè)非密封(non-sealed)類中,總是把那些public和protected的方法定義為virtual 36. 除非為了和其他語(yǔ)音進(jìn)行互動(dòng),否則絕對(duì)不要使用不安全的代碼 37. 避免顯示類型轉(zhuǎn)換。使用as關(guān)鍵字安全的轉(zhuǎn)換到另一個(gè)類型 Dog dog = new GermanShepherd() 38. 在調(diào)用一個(gè)代理前,總是檢查它是否為nullGermanShepherd shepherd = dog as GermanShepherd; if(shepherd != null) { ![]() 39. 不要提供public的事件成員變量。改用Event Accessor 40. 總是使用接口 41. 接口和類中方法和屬性的比應(yīng)該在2:1左右 42. 避免只有一個(gè)成員的接口 43. 努力保證一個(gè)接口有3~5個(gè)成員 44. 不要讓一個(gè)接口中成員的數(shù)量超過(guò)20,而12則是更為實(shí)際的限制。 45. 避免在接口中包含事件 46. 當(dāng)使用抽象類的時(shí)候,提供一個(gè)接口 47. 在類繼承結(jié)構(gòu)中暴露接口 48. 推薦使用顯示接口實(shí)現(xiàn) 49. 從來(lái)不要假設(shè)一個(gè)類型支持某個(gè)接口。在使用前總是要詢問(wèn)一下。 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 50.不要硬編碼向用戶顯示的字符串。要使用資源 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 60. 除了在一個(gè)構(gòu)造函數(shù)中調(diào)用其他的構(gòu)造函數(shù)之外,不要使用this關(guān)鍵字 該文章在 2017/2/7 18:53:52 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |