C#代碼規(guī)范(湖南大學(xué)).doc
《C#代碼規(guī)范(湖南大學(xué)).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《C#代碼規(guī)范(湖南大學(xué)).doc(11頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
創(chuàng)新課程 參考案例 鐵路局計(jì)量管理系統(tǒng) C#代碼規(guī)范 湖南大學(xué)軟件學(xué)院 2007年8月 文檔信息: 文檔編號(hào) MMIS-03 文檔名稱(chēng) 計(jì)量系統(tǒng)C#代碼規(guī)范 文檔描述 該文檔詳細(xì)定義了計(jì)量系統(tǒng)開(kāi)發(fā)中的C#代碼編寫(xiě)規(guī)范,本文檔是后續(xù)分模塊程序編碼的規(guī)范性文檔。 VSS中文檔存放路徑 $/學(xué)院/軟件開(kāi)發(fā)部/計(jì)量系統(tǒng)/開(kāi)發(fā)設(shè)計(jì)文檔 負(fù)責(zé)人 狀態(tài) 定稿 文檔變更記錄: 時(shí)間 修改人 章節(jié) 描述 2007-05-29 陳浩 所有 創(chuàng)建新文檔 相關(guān)文檔: 文檔 路徑 計(jì)量系統(tǒng)需求分析說(shuō)明書(shū) $/學(xué)院/軟件開(kāi)發(fā)部/計(jì)量系統(tǒng)/開(kāi)發(fā)設(shè)計(jì)文檔 計(jì)量系統(tǒng)功能說(shuō)明書(shū) $/學(xué)院/軟件開(kāi)發(fā)部/計(jì)量系統(tǒng)/開(kāi)發(fā)設(shè)計(jì)文檔 文檔確認(rèn)與評(píng)審記錄: 審核人 審核時(shí)間 意見(jiàn) 備注 項(xiàng)目組 2005-7-28 評(píng)審?fù)ㄟ^(guò) 用戶(hù)評(píng)審確認(rèn) 目 錄 1 編程風(fēng)格 4 1.1 統(tǒng)一編程風(fēng)格的意義 4 1.2 變量命名規(guī)則 4 1.3 函數(shù)命名規(guī)則 5 1.4 類(lèi)命名規(guī)則 5 1.5 常見(jiàn)語(yǔ)句書(shū)寫(xiě)規(guī)則 6 1.6 注釋風(fēng)格 7 2 代碼組織 7 3 代碼優(yōu)化 8 3.1 代碼優(yōu)化的意義 8 3.2 函數(shù)內(nèi)的代碼優(yōu)化 8 3.3 類(lèi)內(nèi)的代碼優(yōu)化 9 3.4 類(lèi)之間的代碼優(yōu)化 10 4 調(diào)試技巧 10 4.1 編譯時(shí)的錯(cuò)誤 10 4.2 運(yùn)行時(shí)的錯(cuò)誤 10 4.3 C#常見(jiàn)問(wèn)題 11 1 編程風(fēng)格 1.1 統(tǒng)一編程風(fēng)格的意義 增加開(kāi)發(fā)過(guò)程代碼的強(qiáng)壯性、可讀性、易維護(hù)性 減少有經(jīng)驗(yàn)和無(wú)經(jīng)驗(yàn)開(kāi)發(fā)人員編程所需的腦力工作 為軟件的良好維護(hù)性打下好的基礎(chǔ) 在項(xiàng)目范圍內(nèi)統(tǒng)一代碼風(fēng)格 通過(guò)人為以及自動(dòng)的方式對(duì)最終軟件應(yīng)用質(zhì)量標(biāo)準(zhǔn) 使新的開(kāi)發(fā)人員快速適應(yīng)項(xiàng)目氛圍 支持項(xiàng)目資源的復(fù)用:允許開(kāi)發(fā)人員從一個(gè)項(xiàng)目區(qū)域(或子項(xiàng)目團(tuán)隊(duì))移動(dòng)到另一個(gè),而不需要重新適應(yīng)新的子項(xiàng)目團(tuán)隊(duì)的氛圍 一個(gè)優(yōu)秀而且職業(yè)化的開(kāi)發(fā)團(tuán)隊(duì)所必需的素質(zhì) 1.2 變量命名規(guī)則 前綴(小寫(xiě)字母加下劃線)表明變量的作用域,無(wú)前綴則表明是局部變量或函數(shù)的參數(shù)。如: m_xx 表示是類(lèi)的成員變量,控件變量例外 g_xx 表示是全局變量,在C#中,也可以理解為在整個(gè)項(xiàng)目中都可能用到的靜態(tài)變量 c_xx 或者XX 表示是一個(gè)常量 用數(shù)據(jù)類(lèi)型全稱(chēng)中的關(guān)鍵字母代表特定的數(shù)據(jù)類(lèi)型(一個(gè)或多個(gè)小寫(xiě)字母),如下表。 常用數(shù)據(jù)類(lèi)型縮寫(xiě) 數(shù)據(jù)類(lèi)型 i int b bool str string c char f float d double ob object lbl Label txt TextBox btn Button cmb ComboBox mnu Mainmenu mnuItem MenuItem chk CheckBox grd DataGrid tm Timer frm Form pnl Panel gup GroupBox tv TreeView rdo RadioButton lb ListBox tlb ToolBar dt DateTime cn Connection cmd Command ds DataSet da DataAdapter dv DataView dbTable DataTable dbReader DataReader param Parameter dbRow DataRow dbCol DataColumn 注:如果模塊中只有一個(gè)類(lèi)實(shí)例對(duì)象,則可以只用簡(jiǎn)寫(xiě)。如Connection對(duì)象可以用cn來(lái)命名。 1.3 函數(shù)命名規(guī)則 函數(shù)名用首字母大寫(xiě)的英文單詞組合表示(如用動(dòng)詞+名詞的方法),其中至少有一個(gè)動(dòng)詞 應(yīng)該避免的命名方式 和繼承來(lái)的函數(shù)名一樣。即使函數(shù)的參數(shù)不一樣,也盡量不要這么做,除非想要重載它 只由一個(gè)動(dòng)詞組成,如:Save、Update。改成如:SaveValue、UpdateDataSet則比較好 函數(shù)參數(shù)的命名規(guī)則 函數(shù)參數(shù)應(yīng)該具有自我描述性,應(yīng)該能夠做到見(jiàn)其名而知其意 用匈牙利命名法命名 1.4 類(lèi)命名規(guī)則 類(lèi)的命名通常以父類(lèi)的簡(jiǎn)寫(xiě)開(kāi)頭。如:FrmXXX可看出該類(lèi)從Form中繼承而來(lái) 類(lèi)名中盡量不要出現(xiàn)下劃線 類(lèi)變量的命名可以參照,如:FrmXXX frmXXX = new FrmXXX(),即首字母小寫(xiě)即可 1.5 常見(jiàn)語(yǔ)句書(shū)寫(xiě)規(guī)則 如下表所示。 語(yǔ)句 提倡的風(fēng)格 if if(condition) { statements; } else { statements; } for for(initialization; condition; update) { statements; } foreach foreach(something in collection) { statements; } switch switch(…) { case ..: break; case …: break; default: } while while(..) { statements; } do-while do { statements; } while(condition); try-catch try { statements; } catch(Exception e) { handle exception; } 同一代碼塊內(nèi)的不同邏輯塊之間應(yīng)空一行 { do statement1; do statement2; } 函數(shù)與函數(shù)之間至少空一行,但不超三行 1.6 注釋風(fēng)格 注釋?xiě)?yīng)該正確、簡(jiǎn)潔、有重點(diǎn) 應(yīng)該寫(xiě)優(yōu)雅的、可讀性良好的代碼,而不是為玄妙、晦澀的代碼寫(xiě)注釋 原則上應(yīng)盡量減少程序體內(nèi)代碼的注釋?zhuān)瑧?yīng)該保持代碼本身的直接可讀性 函數(shù)的注釋?zhuān)梢灾粚?duì)public或者重要的private函數(shù)進(jìn)行注解 2 代碼組織 代碼組織是對(duì)整個(gè)項(xiàng)目的代碼進(jìn)行整理,使之更加有序。實(shí)現(xiàn)類(lèi)似功能的文件應(yīng)該放在同一個(gè)文件夾中或者同一個(gè)項(xiàng)目中。例如,可把整個(gè)項(xiàng)目分為以下幾個(gè)層次: SystemFramework層 提供一些給其他公用的服務(wù),比如說(shuō)系統(tǒng)日志、應(yīng)用程序配置、異常處理、調(diào)試類(lèi)等讀取Web.config和*.exe.config一般都在這一層。 Common層 把邏輯上的tables抽象成一些類(lèi),這些類(lèi)一般從DataSet繼承,生成一些strong typed Dataset,類(lèi)中不涉及任何數(shù)據(jù)庫(kù)操作。 DataAccess層 這一層的類(lèi)負(fù)責(zé)與數(shù)據(jù)庫(kù)的連接,以Common層對(duì)象為媒介讀取、更新、添加、刪除數(shù)據(jù)庫(kù)對(duì)象。為Bussiness層提供數(shù)據(jù)服務(wù)。 Bussiness Logic 層 如果需要的話可以分為以下兩層,也可以合為一層。 Business Rule層 包含各種商務(wù)邏輯和規(guī)則。 Business Faade層 提供給UI層所有的系統(tǒng)接口,這一層抽象出了UI層所需要用到的功能。這一層的類(lèi)可以通過(guò)繼承MarshalByRefObject類(lèi),支持Remoting,配置到專(zhuān)門(mén)的應(yīng)用程序服務(wù)器上。 UI層 只調(diào)用Bussiness層和SystemFramework層的接口,實(shí)現(xiàn)用戶(hù)界面。包括: WinUI WebUI WebService(并不是用戶(hù)界面,但是邏輯上屬于這一層) 3 代碼優(yōu)化 3.1 代碼優(yōu)化的意義 僅僅對(duì)符合功能說(shuō)明書(shū)的要求、能正確運(yùn)行的代碼進(jìn)行優(yōu)化是有意義的 代碼優(yōu)化能減少冗余代碼的數(shù)量,用更少的代碼來(lái)實(shí)現(xiàn)同樣的功能 提高代碼的內(nèi)聚程度,減少耦合程度 對(duì)代碼的抽象能提高代碼的重用度,對(duì)今后其他項(xiàng)目的進(jìn)度有非常重要的意義 3.2 函數(shù)內(nèi)的代碼優(yōu)化 去掉從來(lái)沒(méi)有用到過(guò)的參數(shù) 始終進(jìn)行參數(shù)檢驗(yàn)。不要認(rèn)為只有我才會(huì)調(diào)用這個(gè)函數(shù),我能夠保證參數(shù)的有效性。事實(shí)上很多運(yùn)行錯(cuò)誤就是沒(méi)有對(duì)參數(shù)進(jìn)行檢驗(yàn)。對(duì)于傳入了非法值的函數(shù)調(diào)用,可以返回一個(gè)對(duì)調(diào)用無(wú)意義的值(如:null,-1),或者干脆拋出一個(gè)異常 函數(shù)的參數(shù)不宜過(guò)多,如果實(shí)在是太多,可以考慮將這些參數(shù)封裝在一個(gè)類(lèi)中,然后將這個(gè)類(lèi)的某個(gè)實(shí)例作為參數(shù)傳入函數(shù) 如果函數(shù)從來(lái)不會(huì)修改某個(gè)參數(shù)的值,則應(yīng)該盡量將參數(shù)聲明為const 如果函數(shù)中用到的類(lèi)成員變量或者其他全局變量可以用傳入?yún)?shù)的方式代替,則用參數(shù)代替,這樣可以減少該函數(shù)和外界的關(guān)系,提高內(nèi)聚 一個(gè)單一的函數(shù)的代碼量不宜過(guò)多。如果實(shí)在很多,則可以把它切分成小的函數(shù),例如長(zhǎng)的switch語(yǔ)句是最容易切分的 單個(gè)函數(shù)中盡量避免相同的代碼,可以用條件語(yǔ)句或者抽取出來(lái)作為函數(shù)的方法消除這些冗余 盡量保持函數(shù)只有一個(gè)出口,即只有一處return語(yǔ)句,如: 原始代碼 string GetControlText(int nIndex) { if(ParameterValid() == false) return null; switch(nIndex) { case 0: return txtValue1.Text; case 1: return txtValue2.Text; ……. } } 優(yōu)化過(guò)的代碼 string GetControlText(int nIndex) { string strReturnValue = null; if(ParameterValid() == true) { switch(nIndex) { case 0: strReturnValue = txtValue1.Text; break; case 1: strReturnValue = txtValue2.Text; break; ….. } } return strReturnValue; } 3.3 類(lèi)內(nèi)的代碼優(yōu)化 只有類(lèi)對(duì)外的接口才聲明為public 在類(lèi)的成員函數(shù)中如果存在著相同的代碼,則將其抽取成為private的成員函數(shù),以減少代碼的冗余,保持在一個(gè)類(lèi)中沒(méi)有相同的兩份代碼的副本 盡量減少成員函數(shù)之間的依賴(lài),特別是對(duì)成員變量值的依賴(lài) 3.4 類(lèi)之間的代碼優(yōu)化 類(lèi)應(yīng)該是一個(gè)實(shí)體,具有自己的數(shù)據(jù)和對(duì)這些數(shù)據(jù)的操作 把界面操作和數(shù)據(jù)處理分離在兩個(gè)類(lèi)中是比較好的做法 對(duì)于不同類(lèi)之間有相同代碼的情況,有以下幾種處理方法: 將相同的代碼抽象出來(lái)作為父類(lèi),其他的類(lèi)從中繼承,由此來(lái)共享代碼 將相同的代碼抽象出來(lái)作為一個(gè)新類(lèi),其他類(lèi)中聲明一個(gè)該類(lèi)的變量,由此來(lái)共享代碼 這兩種方法各有利弊,前種方法比較適于當(dāng)共享代碼在調(diào)用之前必須做特殊的初始化,而這些初始化可能很難用函數(shù)調(diào)用來(lái)完成,這時(shí)父類(lèi)的初始化代碼中可以加入一個(gè)虛擬函數(shù),所有的子類(lèi)都重載該函數(shù),做特定的初始化;后種方法可以封裝得很徹底,只暴露出對(duì)外的接口,和其他類(lèi)的耦合程度比較小 任何重復(fù)的代碼都可以抽取出來(lái),不僅僅是對(duì)數(shù)據(jù)進(jìn)行處理的代碼,界面代碼同樣可以抽取出來(lái) 如果許多類(lèi)都有做類(lèi)似事情的函數(shù),名稱(chēng)相同、內(nèi)部具體的操作不同,這時(shí)候可以將這些函數(shù)提取出來(lái)作為一個(gè)接口。其他類(lèi)都從中繼承,然后根據(jù)自己的要求來(lái)實(shí)現(xiàn)之 4 調(diào)試技巧 4.1 編譯時(shí)的錯(cuò)誤 始終在“輸出”窗口中看程序編譯的輸出,“任務(wù)列表”窗口中經(jīng)常會(huì)遺留以前編譯后留下來(lái)的消息 認(rèn)真查看編譯輸出的錯(cuò)誤消息,掌握正確的錯(cuò)誤地點(diǎn)和信息 當(dāng)碰到莫名其妙的編譯時(shí)的錯(cuò)誤應(yīng) 1) 重新編譯整個(gè)項(xiàng)目或者解決方案。 2) 關(guān)閉Visual Studio.NET,然后再打開(kāi)。 3) 重新啟動(dòng)計(jì)算機(jī)。 4) 保證編譯出來(lái)的程序不在運(yùn)行中或者所有的輸出文件的屬性都是可寫(xiě)的。 4.2 運(yùn)行時(shí)的錯(cuò)誤 首先要讀取異常信息,猜測(cè)大概的發(fā)生地和發(fā)生原因 仔細(xì)讀發(fā)生異常處源代碼 在相應(yīng)處設(shè)置斷點(diǎn),然后單步運(yùn)行 如果還是找不出錯(cuò)誤,可以請(qǐng)同事幫忙。當(dāng)著同事的面講解自己的源代碼,旁觀者看得最清 配置問(wèn)題和數(shù)據(jù)庫(kù)中數(shù)據(jù)的錯(cuò)誤也會(huì)導(dǎo)致運(yùn)行時(shí)的錯(cuò)誤 4.3 C#常見(jiàn)問(wèn)題 C#中控件的消息處理是立即的。也就是說(shuō),如果對(duì)某個(gè)控件的某個(gè)消息寫(xiě)了消息處理函數(shù),然后假如當(dāng)程序中某處的代碼A引發(fā)了該消息時(shí),程序流程會(huì)立即跳轉(zhuǎn)到該消息的消息函數(shù)中去,如果這時(shí)消息函數(shù)中發(fā)生異常,即使代碼A處于異常塊中,該異常也無(wú)法捕獲。所以如果出現(xiàn)在給控件的某個(gè)屬性賦值后發(fā)生異常的情況,則請(qǐng)找一下是否已經(jīng)對(duì)該控件的該屬性寫(xiě)了消息函數(shù)(別忘了在父類(lèi)也許會(huì)有),如果有的話,則應(yīng)在這個(gè)消息處理函數(shù)中也加上斷點(diǎn) 注意集成環(huán)境中窗體設(shè)計(jì)器的副作用。對(duì)于處在InitializeComponent中的代碼,如果需要做修改,盡量先將其搬到函數(shù)外面來(lái),否則,不能保證修改過(guò)的代碼不被集成環(huán)境改回來(lái)或者刪掉 C#中很多異常都是由于強(qiáng)制轉(zhuǎn)換產(chǎn)生的,所以對(duì)強(qiáng)制轉(zhuǎn)換一定要放在異常處理塊中- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- C# 代碼 規(guī)范 湖南大學(xué)
鏈接地址:http://m.appdesigncorp.com/p-9009782.html