天天看點

c#代碼标準化And控件字首名大全

· 增加開發過程代碼的強壯性、可讀性、易維護性

· 減少有經驗和無經驗開發人員程式設計所需的腦力工作

· 為軟體的良好維護性打下好的基礎

· 在項目範圍内統一代碼風格

· 通過人為以及自動的方式對最終軟體應用品質标準

· 使新的開發人員快速适應項目氛圍

· 支援項目資源的複用:允許開發人員從一個項目區域(或子項目團隊)移動到另一個,而不需要重新适應新的子項目團隊的氛圍

· 一個優秀而且職業化的開發團隊所必需的素質

·

字首(小寫字母加下劃線)表明變量的作用域,無字首則表明是局部變量或函數的參數。如:

m_xx 表示是類的成員變量,控件變量例外

g_xx 表示是全局變量,在C#中,也可以了解為在整個項目中都可能用到的靜态變量

c_xx 或者XX 表示是一個常量

1.1 函數命名規則

· 函數名用首字母大寫的英文單詞組合表示(如用動詞+名詞的方法),其中至少有一個動詞

· 應該避免的命名方式

和繼承來的函數名一樣。即使函數的參數不一樣,也盡量不要這麼做,除非想要重載它

隻由一個動詞組成,如:Save、Update。改成如:SaveValue、UpdateDataSet則比較好

· 函數參數的命名規則

函數參數應該具有自我描述性,應該能夠做到見其名而知其意

用匈牙利命名法命名

1.2 類命名規則

· 類的命名通常以父類的簡寫開頭。如:FrmXXX可看出該類從Form中繼承而來

· 類名中盡量不要出現下劃線

· 類變量的命名可以參照,如:FrmXXX frmXXX = new FrmXXX(),即首字母小寫即可

1.3 注釋風格

·

注釋應該正确、簡潔、有重點

· 應該寫優雅的、可讀性良好的代碼,而不是為玄妙、晦澀的代碼寫注釋

· 原則上應盡量減少程式體内代碼的注釋,應該保持代碼本身的直接可讀性

· 函數的注釋,可以隻對public或者重要的private函數進行注解

代碼組織

代碼組織是對整個項目的代碼進行整理,使之更加有序。實作類似功能的檔案應該放在同一個檔案夾中或者同一個項目中。例如,可把整個項目分為以下幾個層次:

· SystemFramework層

提供一些給其他公用的服務,比如說系統日志、應用程式配置、異常處理、調試類等讀取Web.config和*.exe.config一般都在這一層。

· Common層

把邏輯上的tables抽象成一些類,這些類一般從DataSet繼承,生成一些strong typed Dataset,類中不涉及任何資料庫操作。

· DataAccess層

這一層的類負責與資料庫的連接配接,以Common層對象為媒介讀取、更新、添加、删除資料庫對象。為Bussiness層提供資料服務。

· Bussiness Logic 層

如果需要的話可以分為以下兩層,也可以合為一層。

Business Rule層

包含各種商務邏輯和規則。

Business Fa?0?4ade層

提供給UI層所有的系統接口,這一層抽象出了UI層所需要用到的功能。這一層的類可以通過繼承MarshalByRefObject類,支援Remoting,配置到專門的應用程式伺服器上。

· UI層

隻調用Bussiness層和SystemFramework層的接口,實作使用者界面。包括:

WinUI

WebUI

WebService(并不是使用者界面,但是邏輯上屬于這一層)

代碼優化

2.1 代碼優化的意義

· 僅僅對符合功能說明書的要求、能正确運作的代碼進行優化是有意義的

· 代碼優化能減少備援代碼的數量,用更少的代碼來實作同樣的功能

· 提高代碼的内聚程度,減少耦合程度

· 對代碼的抽象能提高代碼的重用度,對今後其他項目的進度有非常重要的意義

2.2 函數内的代碼優化

· 去掉從來沒有用到過的參數

· 始終進行參數檢驗。不要認為隻有我才會調用這個函數,我能夠保證參數的有效性。事實上很多運作錯誤就是沒有對參數進行檢驗。對于傳入了非法值的函數調用,可以傳回一個對調用無意義的值(如:null,-1),或者幹脆抛出一個異常

· 函數的參數不宜過多,如果實在是太多,可以考慮将這些參數封裝在一個類中,然後将這個類的某個執行個體作為參數傳入函數

· 如果函數從來不會修改某個參數的值,則應該盡量将參數聲明為const

· 如果函數中用到的類成員變量或者其他全局變量可以用傳入參數的方式代替,則用參數代替,這樣可以減少該函數和外界的關系,提高内聚

· 一個單一的函數的代碼量不宜過多。如果實在很多,則可以把它切分成小的函數,例如長的switch語句是最容易切分的

· 單個函數中盡量避免相同的代碼,可以用條件語句或者抽取出來作為函數的方法消除這些備援

3 類内的代碼優化

· 隻有類對外的接口才聲明為public

· 在類的成員函數中如果存在着相同的代碼,則将其抽取成為private的成員函數,以減少代碼的備援,保持在一個類中沒有相同的兩份代碼的副本

· 盡量減少成員函數之間的依賴,特别是對成員變量值的依賴

3.1類之間的代碼優化

· 類應該是一個實體,具有自己的資料和對這些資料的操作

· 把界面操作和資料處理分離在兩個類中是比較好的做法

· 對于不同類之間有相同代碼的情況,有以下幾種處理方法:

将相同的代碼抽象出來作為父類,其他的類從中繼承,由此來共享代碼

将相同的代碼抽象出來作為一個新類,其他類中聲明一個該類的變量,由此來共享代碼

這兩種方法各有利弊,前種方法比較适于當共享代碼在調用之前必須做特殊的初始化,而這些初始化可能很難用函數調用來完成,這時父類的初始化代碼中可以加入一個虛拟函數,所有的子類都重載該函數,做特定的初始化;後種方法可以封裝得很徹底,隻暴露出對外的接口,和其他類的耦合程度比較小

· 任何重複的代碼都可以抽取出來,不僅僅是對資料進行處理的代碼,界面代碼同樣可以抽取出來

· 如果許多類都有做類似事情的函數,名稱相同、内部具體的操作不同,這時候可以将這些函數提取出來作為一個接口。其他類都從中繼承,然後根據自己的要求來實作之

調試技巧

4.1 編譯時的錯誤

· 始終在“輸出”視窗中看程式編譯的輸出,“任務清單”視窗中經常會遺留以前編譯後留下來的消息

· 認真檢視編譯輸出的錯誤消息,掌握正确的錯誤地點和資訊

· 當碰到莫名其妙的編譯時的錯誤應

1) 重新編譯整個項目或者解決方案。

2) 關閉Visual Studio.NET,然後再打開。

3) 重新啟動計算機。

4) 保證編譯出來的程式不在運作中或者所有的輸出檔案的屬性都是可寫的。

4.2 運作時的錯誤

· 首先要讀取異常資訊,猜測大概的發生地和發生原因

· 仔細讀發生異常處源代碼

· 在相應處設定斷點,然後單步運作

· 如果還是找不出錯誤,可以請同僚幫忙。當着同僚的面講解自己的源代碼,旁觀者看得最清

· 配置問題和資料庫中資料的錯誤也會導緻運作時的錯誤

4.3 C#常見問題

· C#中控件的消息處理是立即的。也就是說,如果對某個控件的某個消息寫了消息處理函數,然後假如當程式中某處的代碼A引發了該消息時,程式流程會立即跳轉到該消息的消息函數中去,如果這時消息函數中發生異常,即使代碼A處于異常塊中,該異常也無法捕獲。是以如果出現在給控件的某個屬性指派後發生異常的情況,則請找一下是否已經對該控件的該屬性寫了消息函數(别忘了在父類也許會有),如果有的話,則應在這個消息處理函數中也加上斷點

· 注意內建環境中窗體設計器的副作用。對于處在InitializeComponent中的代碼,如果需要做修改,盡量先将其搬到函數外面來,否則,不能保證修改過的代碼不被內建環境改回來或者删掉

· C#中很多異常都是由于強制轉換産生的,是以對強制轉換一定要放在異常處理塊中

常用控件命名:

1 btn Button

2 chk CheckBox

3 ckl CheckedListBox

4 cmb ComboBox

5 dtp DateTimePicker

6 lbl Label

7 llb LinkLabel

8 lst ListBox

9 lvw ListView

10 mtx MaskedTextBox

11 cdr MonthCalendar

12 icn NotifyIcon

13 nud NumeircUpDown

14 pic PictureBox

15 prg ProgressBar

16 rdo RadioButton

17 rtx RichTextBox

18 txt TextBox

19 tip ToolTip

20 tvw TreeView

21 wbs WebBrowser

容器控件

1 flp FlowLayoutPanel

2 grp GroupBox

3 pnl Panel

4 spl SplitContainer

5 tab TabControl

6 tlp TableLayoutPanel

菜單和工具欄

1 cms ContextMenuStrip

2 mns MenuStrip

3 ssr StatusStrip

4 tsr ToolStrip

5 tsc ToolStripContainer

6 cmu ContextMenu

資料

1 dts DataSet

2 dgv DataGridView

3 bds BindingSource

4 bdn BindingNavigator

5 rpv ReportViewer

對話框

1 cld ColorDialog

2 fbd FolderBrowserDialog

3 fnd FontDialog

4 ofd OpenFileDialog

5 sfd SaveFileDialog

元件

1 bgw BackgroundWorker

2 dre DirectoryEntry

3 drs DirectorySearcher

4 err ErrorProvider

5 evl EventLog

6 fsw FileSystemWatcher

7 hlp HelpProvider

8 img ImageList

9 msq MessageQueue

10 pfc PerformanceCounter

11 prc Process

12 spt SerialPort

13 scl ServiceController

14 tmr Timer

印刷

1 psd PageSetupDialog

2 prd PrintDialog

3 pdc PrintDocument

4 prv PrintPreviewControl

5 ppd PrintPreviewDialog

水晶報表

1 crv CrystalReportViewer

2 rpd ReportDocument

其他

1 dud DomainUpDown

2 hsc HScrollBar

3 prg PropertyGrid

4 spl Splitter

5 trb TrackBar

6 vsc VScrollBar

繼續閱讀