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