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