軟件開發代碼規范C#版_第1頁
軟件開發代碼規范C#版_第2頁
軟件開發代碼規范C#版_第3頁
軟件開發代碼規范C#版_第4頁
軟件開發代碼規范C#版_第5頁
已閱讀5頁,還剩8頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

-.z.文檔編號版本本部門開放工作標準共NUM頁軟件開發代碼標準〔C#版〕擬制:日期:2007-2-13審核:日期:審核:日期:批準:日期:版權所有********修訂紀錄日期修訂版本描述作者2007-2-13初稿完成2007-5-10修正2007-11-2修正目錄TOC\o"1-3"\h\z1、第一章命名標準41.1、第一節總則4、第二節變量命名標準4、CodeBehind內部命名標準4、控件命名標準5、第三節常量命名標準5、第四節命名空間、類、方法命名標準5、第五節接口命名標準6、第六節命名標準小結62、第二章代碼注釋標準6、第一節模塊級注釋標準〔命名空間、類等〕6、第二節方法級注釋標準72.2.1、屬性注釋72.2.2、方法注釋7、第三節代碼間注釋標準83、第三章編寫標準8、第一節格式標準8、第二節編程標準93.2.1、程序構造要求93.2.2、可讀性要求93.2.3、構造化要求103.2.4、正確性與容錯性要求103.2.5、可重用性要求103.2.6、interface使用考前須知113.2.7、類使用考前須知113.2.8、流程控制語句考前須知123.2.8、其他應考前須知13注:Pascal命名法則:即名稱中所有單詞的第一個字母大寫其他字母使用小寫形式。Camel命名法則:即名稱中第一個單詞各個字母全部小寫,其他局部遵循Pascal命名法則。第一章命名標準第一節總則本命名規則除特殊提及外統一使用Camel命名法則。如:controlMenu命名時盡量不使用拼音,更不可使用拼音縮寫〔專有名詞除外〕。如果使用品牌名稱命名時其大小寫盡量保持和品牌名稱一致的樣式。如:Lu*則命名時,不要寫成LU*,或者Lu*,而應該保持與原品牌名稱風格一致使用Lu*使用專有名詞或英文縮寫命名時采用大寫形式。如:CNNIC制止使用僅區分大小寫的方式命名。如:Abc與abc僅用大寫A來區分,這樣寫在類C系語言中不會出錯,但是不利于系統的遷移1.2、第二節變量命名標準、CodeBehind內部命名標準1.公有字段/屬性使用Pascal命名規則,私有變量/保護變量/局部變量使用Camel命名規則,遵循動賓構造。 例:publicclassHello{privatestringuserName;privateDateTimeloginTime;privateboolisOnline;publicstringUserName{ get{returnthis.userName;} }}2.即使對于可能僅出現在幾個代碼行中的生存期很短的變量,仍然使用意義描述性的名稱。僅對于短循環索引使用單字母變量名,如i或j3.在變量名中使用互補對,如Min/Ma*、Begin/End和Open/Close。4.當一個方法內部變量繁多的時候,可以使用Camel命名法則,其中第一個單詞可以使用變量類型的縮寫來說明以示區別。 例:stringstrName;intintAge;objectobjPerson;、控件命名標準 1.控件命名使用控件縮寫加名稱的方式例:控件縮寫聲明LabellblprotectedLabellblName;Te*tBo*t*tprotectedTe*tBo*t*tContent;CheckBo*chkprotectedCheckBo*chkRight;ButtonbtnprotectedButtonbtnOK;ListBo*lb*protectedListBo*lstItem;DropDownListddlprotectedDropDownListddlArea;

etc.1.3、第三節常量命名標準常量名也應當有一定的意義,格式為NOUN或NOUN_VERB。常量名均為大寫,字之間用下劃線分隔。例:privateconstboolWEB_ENABLEPAGECACHE_DEFAULT=true;privateconstintWEB_PAGECACHEE*PIRESINSECONDS_DEFAULT=3600;privateconstboolWEB_ENABLESSL_DEFAULT=false;注:變量名和常量名最多可以包含255個字符,但是,超過25到30個字符的名稱比擬笨拙。此外,要想取一個有實際意義的名稱,清楚地表達變量或常量的用途,25或30個字符應當足夠了。1.4、第四節命名空間、類、方法命名標準1.名字應該能夠標識事物的特性。2.名字盡量不使用縮寫,除非它是眾所周知的。3.名字可以有兩個或三個單詞組成,但通常不應多于三個。4.使用名詞或名詞短語命名類。5.盡可能少用縮寫。6.不要使用下劃線字符(_)。7.命名空間名稱使用此格式:Snda+工程名稱+邏輯層名稱例:namespace{publicclassFileStream{publicvoidInPut(stringpara){}}}1.5、第五節接口命名標準和類命名標準一樣,唯一區別是接口在名字前加上大寫"I〞前綴例:interfaceIDBCommand;interfaceIButton;1.6、第六節 命名標準小結1、使用Pascal命名方式命名類、方法、屬性和常量2、使用Camel命名方式命名局部變量和方法的參數3、接口使用Pascal命名方式,并且在前面添加"I〞4、方法命名使用動賓構造,比方ShowDialog()5、有返回值的方法命名應有單詞來描述,比方GetObjectState()6、防止使用帶命名空間的類型,盡量用using關鍵字7、防止把using語句放到命名空間內8、控件命名使用控件縮寫加名稱的方式9、常量命名采用全部大寫的形式,要想一個有實際意義的名稱,清楚地表達常量的用途2、第二章代碼注釋標準2.1、第一節模塊級注釋標準〔命名空間、類等〕模塊須以以下形式書寫模塊注釋:///<summary>///〔功能模塊簡述〕///</summary>///<remarks>///名稱:〔或者編號,當模塊繁多的時候以編號檢索〕///功能:///程序設計:///開發日期:///備注:///修改人:///修改日期:///備注:〔如果屢次修改,請重復以上三項〕///</remarks>publicclassTestSpace{}注意:詳細說明都寫在<remarks></remarks>內部,為的是既方便IDE動態幫助又方便自動化出工程文檔,適用以下注釋標準,不再贅述。修改人和修改日期每次修改的時候都要自行添加上去。2.2、第二節方法級注釋標準、屬性注釋 屬性必須以以下形式給予注釋,如果有備注的需求請加在<remarks></remarks>內部:///<summary>///簡述屬性功能///</summary>///<remarks>///備注///</remarks>publicstringName;、方法注釋///<summary>///〔簡述方法功能〕///</summary>///<paramname="<參數名稱>"><參數說明></param>///<returns>///對方法返回值的說明,該說明必須明確說明返回的值代表什么含義///</returns>///<e*ample>(使用例如)</e*ample>///<remarks>///名稱:〔或者編號,當模塊繁多的時候以編號檢索〕///功能:///程序設計:///開發日期:///備注:///修改人:///修改日期:///備注:〔如果屢次修改,請重復以上三項〕///</remarks>publicvoidTestMethod(stringPara){}2.3、第三節代碼間注釋標準代碼間注釋分為單行注釋和多行注釋:單行注釋://<單行注釋>多行注釋:/*多行注釋1多行注釋2多行注釋3*/代碼中遇到語句塊時必須添加注釋〔if,for,foreach,……〕,添加的注釋必須能夠說明此語句塊的作用和實現手段〔所用算法等等〕。但是顯而易見的代碼不易注釋。行間的注釋量不得大于代碼量的25%,不小于10%2.4、第四節功能變更注釋標準當對*個現有的功能進展修改時,需要在該功能所在的方法<summary></summary>內部加上注釋,說明變更內容、變更時間、變更人。假設這一功能變更非常重要,請在模塊描述中也加上相關注釋。建議格式如下://功能變更:*****updatedbywhoYYMMDD3、第三章編寫標準3.1、第一節格式標準所有的縮進為1個Tab〔設置1個Tab占4個空格空間〕,使用VS.NET的默認設置。在代碼中垂直對齊左括號和右括號。例:if(*==0){.Write("用戶編號必須輸入!");}允許以下情況:if(*==0){.Write("用戶編號必須輸入!");}不允許以下情況:if(*==0){.Write("用戶編號必須輸入!");}為了防止在閱讀代碼時不得不滾動源代碼編輯器,每行代碼或注釋在1024*800的顯示頻率下不得超過一顯示屏。當一行被分為幾行時,通過將串聯運算符放在每一行的末尾而不是開頭,清楚地表示沒有后面的行是不完整的。每一行上放置的語句防止超過一條。在大多數運算符之前和之后使用空格,這樣做時不會改變代碼的意圖卻可以使代碼容易閱讀。例:intj=i+k;而不應寫為intj=i+k;將大的復雜代碼節分為較小的、易于理解的模塊。3.2、第二節編程標準、程序構造要求程序構造清晰,簡單易懂,單個函數的程序行數不得超過100行。打算干什么,要簡單,直截了當,代碼精簡,防止垃圾程序。盡量使用.NET庫函數和公共函數(無特殊情況不要使用外部方法調用Windows的核心動態鏈接庫API)。不要隨意定義全局變量,盡量使用局部變量。、可讀性要求保持注釋與代碼完全一致。去除無效的注釋處理過程的每個階段都有相關注釋說明。利用縮進來顯示程序的邏輯構造,縮進量一致并以Tab鍵為單位,定義Tab為4個空格。循環、分支層次不要超過五層。注釋可以與語句在同一行,也可以在上行,視語句的長短而定。一目了然的語句不加注釋。注釋的作用范圍可以為:定義、引用、條件分支以及一段代碼。去除IDE自動生成的注釋,比方:...privatevoidPage_Load(objectsender,EventArgse){//todo...〔刪除這段注釋〕}、構造化要求制止出現兩條等價的支路。除了在switch關鍵字的作用域內,制止goto語句。用if語句來強調只執行兩組語句中的一組。制止elsegoto和elsereturn。用case實現多路分支。防止從循環引出多個出口。函數只有一個出口。盡量不使用條件賦值語句。防止不必要的分支。不要輕易用條件分支去替換邏輯表達式。、正確性與容錯性要求程序首先是正確,其次是優美。無法證明你的程序沒有錯誤,因此在編寫完一段程序后,應先回頭檢查。改一個錯誤時可能產生新的錯誤,因此在修改前首先考慮對其它程序的影響。所有變量在調用前必須被初始化。對所有的用戶輸入,必須進展合法性檢查。盡量不要比擬浮點數的相等,如:10.0*0.1==1.0,不可靠,因為不同CPU的浮點運算能力是不同的程序與環境或狀態發生關系時,必須主動去處理發生的意外事件,如文件能否邏輯鎖定、打印機是否聯機等,對于明確的錯誤,要有明確的容錯代碼提示用戶,在這樣不確定的場合都使用trythrowcatch。單元測試也是編程的一部份,提交聯調測試的程序必須通過單元測試。盡量使用標準的容錯語句.例:try{}catch{}finally{}、可重用性要求重復使用的完成相對獨立功能的算法或代碼應抽象為效勞或類。效勞或類應考慮OO思想,減少外界聯系,考慮獨立性或封裝性。、interface使用考前須知1.防止一個接口中只有一個成員。盡量使每個接口中包含3-5個成員。接口中的成員不應該超過20個。防止接口成員中包含事件。2.推薦使用顯式的接口實現。、類使用考前須知1.防止方法的返回值是錯誤代碼。2.盡量定義自定義異常類。當需要定義自定義的異常時:a)自定義異常要繼承于ApplicationE*ception。b)提供自定義的序列化功能。3.只對外公布必要的操作。4.使程序集盡量為最小化代碼(E*E客戶程序)。使用類庫來替換包含的商務邏輯。5.不要提供public的成員變量,使用屬性代替他們。6.防止在繼承中使用new而使用override替換。7.在不是sealed的類中總是將public和protected的方法標記成virtual的。8.防止顯式的轉換,使用as操作符進展兼容類型的轉換。 例:Dogdog=newGermanShepherd();GermanShepherdshepherd=dogasGermanShepherd;if(shepherd!=null){…}9.當類成員包括委托的時候在調用委托之前一定要檢查它是否為null 例:publicclassMySource{publiceventEventHandlerMyEvent;publicvoidFireEvent(){EventHandlertemp=MyEvent;if(temp!=null){temp(this,EventArgs.Empty);}}}10.不要提供公共的事件成員變量,使用事件訪問器替換這些變量。 例:publicclassMySource{MyDelegatem_SomeEvent;publiceventMyDelegateSomeEvent{add{m_SomeEvent+=value;}remove{m_SomeEvent-=value;}}}11.防止在構造里面提供方法。建議使用參數化構造函數,可以重裁操作符。12.類成員間調用請盡量使用this關鍵字。13.除非你想重寫子類中存在名稱沖突的成員或者調用基類的構造函數否則不要使用base來訪問基類的成員。、流程控制語句考前須知1.即使if語句只有一句,也要將if語句的內容用大括號擴起來。2.防止在條件語句中調用返回bool值的函數。可以使用局部變量并檢查這些局部變量。例:boolIsEverythingOK(){…}//防止if(IsEverythingOK()){…}//替換方案boolok=IsEverythingOK();if(ok){…}3.總是使用基于零開場的數組。4.在循環中總是顯式的初始化引用類型的數組。例:publicclassMyClass{}MyClass[]array=newMyClass[100];for(intinde*=0;inde*<array.Length;inde*++){array[inde*]=newMyClass();}5.除非在不完全的switch語句中否則不要使用goto語句。、其他應考前須知1.防止將多個類放在一個文件里面。2.一個文件應該只有一個命名空間,防止將多個命名空間放在同一個文件里面。3.一個文件最好不要超過500行的代碼〔不包括機器產生的代碼〕。4.防止方法中有超過5個參數的情況。使用構造來傳遞多個參數。5.每行代碼不要超過80個字符。6.不要手工的修改機器產生的代碼。如果需要編輯機器產生的代碼,編輯格式和風格要符合該編碼標準。7.不要硬編碼數字的值,總是使用構造函數設定其值或采用常數的方式。8.只有是自然構造才能直接使用const,比方一個星期的天數。9.防止在只讀的變量上使用const。如果想實現只讀,可以直接使用readonly。例:publicclassMyClass{publicreadonlyintNumber;publicMyClass(intsomeValue){Number=someValue;}publicconstintDAYS_IN_WEEK=7;}10.代碼的每一行都應該通過白盒方式的測試。11.在捕獲(catch)語句的拋出異常子句中(throw),總是拋出原始異常維護原始錯誤的堆棧分配。例:catch(E*ceptione*ception){MessageBo*.Show(e*ception.Message);throw;//和throwe*ception一樣。}12.防止在單個程序集里使用多個Main方法。13.數據訪問中但凡使用DateReader對象的,必須使用using語句來即時釋放資源;對于Stream、StreamReader之類的對象,也要使用using語句來即時釋放資源14.防止指定特殊類型的枚舉變量。 例://防止publicenumColor:long{Red,Green,Blue}15.不要硬編碼可能更改的基于配置的字符串,比方連接字符串。16.當需要構建長的字符串的時候,使用StringBuild

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論