---
tags: 程式撰寫規則,變數命名規則,SC
---
<!-- TOC START min:1 max:3 link:true asterisk:false update:true -->
- [程式撰寫命名規則](#程式撰寫命名規則)
- [第1章 命名規範](#第1章-命名規範)
- [1. 類別](#1-類別)
- [2. 字串(成員)](#2-字串成員)
- [3. 方法](#3-方法)
- [4. 屬性](#4-屬性)
- [5. 參數](#5-參數)
- [6. 常數](#6-常數)
- [7. 介面](#7-介面)
- [8. 事件](#8-事件)
- [9. 命名空間](#9-命名空間)
- [第2章 註解規範](#第2章-註解規範)
- [1. 檔案標頭](#1-檔案標頭)
- [2. 類別及成員](#2-類別及成員)
- [第3章 內文規範](#第3章-內文規範)
- [1. 縮寫規範](#1-縮寫規範)
- [2. 排版](#2-排版)
- [3. 語句結構](#3-語句結構)
- [4. 代碼縮排](#4-代碼縮排)
- [5. 大小寫](#5-大小寫)
- [6. 重複名稱](#6-重複名稱)
- [7. SQL編碼](#7-sql編碼)
- [8. 軟體架構](#8-軟體架構)
- [9. 系統](#9-系統)
- [第4章 常見變數命名規則](#第4章-常見變數命名規則)
- [CamelCase(駝峰式命名法, camelCase)](#camelcase駝峰式命名法-camelcase)
- [Pascal Case(Pascal Case)](#pascal-casepascal-case)
- [Snake Case(Snake_Case)](#snake-casesnake_case)
- [Kebeb Case(Kebeb-Case)](#kebeb-casekebeb-case)
- [第4章 參考資料](#第4章-參考資料)
- [附表1 各種型別命名規範總結](#附表1-各種型別命名規範總結)
- [附表2 資料型別縮寫規則](#附表2-資料型別縮寫規則)
- [附表3 Windows控制元件撰寫規則](#附表3-windows控制元件撰寫規則)
- [附表4 資料庫物件撰寫規則](#附表4-資料庫物件撰寫規則)
<!-- TOC END -->
# 程式撰寫命名規則
***
# 第1章 命名規範
## 1. 類別
1. 使用Pascal規則命名類別名,即開頭字母要大寫。
2. 使用能夠反映類別功能的名詞或名詞片語命名類別。
3. 不要使用“I”、“C”、“_”等特定含義字首。
4. 自定義異常類別應以Exception結尾。
5. 檔名要能反映類別的內容,最好是和類別同名。
規則 1.1
``` csharp
Class Test
{
...
}
```
規則 1.4
``` csharp
Class TestException
{
...
}
```
## 2. 字串(成員)
1. 用camel規則來命名類別成員變數名稱,即單字開頭(或單字縮寫)小寫。
2. 類別欄位變數名前可加“_”字首。
3. 禁止在普通變數前加“m_”(這是VC老命名規則)。
規則 2
``` csharp
Class Test
{
privatestring myName;
privatestring _myCoCo;
...
}
```
## 3. 方法
1. 方法名採用Pascal規則,第一個字元要大寫。
2. 方法名應使用動詞或動詞片語。
3. 類別中訪問修飾符或功能相同的方法應該放在一起, 且公共或實現介面的方法在前。
規則 3
``` csharp
Class Test
{
...
publicvoid GetData(...)
{
...
}
privatevoid GetName(...)
{
...
}
privatestatic void GetCount(...)
{
...
}
}
```
## 4. 屬性
1. 使用名詞定義屬性,屬性使用Pascal規則,開頭字元大寫。
2. 屬性和相應欄位名稱要關聯, 可以使用“重構”選單來生成屬性。
規則 4
``` csharp
Class Test
{
private string myName;
public string MyName
{
set
{
myName = Value;
}
get
{
return myName;
}
}
}
```
## 5. 參數
1. 引數採用camel規則命名,且開頭字元小寫。
2. 使用描述性引數名稱,引數名稱應當具有足夠的說明性。
3. 不要給引數加匈牙利語型別表示法的字首。
4. 檢查方法所有輸入引數的有效性。
規則 5
``` csharp
Class Test
{
public void GetData(string name,string strFlag)
{
...
}
}
```
## 6. 常數
1. 唯讀常數使用Pascal規則命名,即開頭字母大寫。
2. 列舉名使用Pascal規則命名,列舉成員本質屬於常數,命名規則同上。
3. 列舉值從小到大順序定義。
4. 靜態欄位或屬性採用Pascal規則,即開頭字元大寫。
規則 6
``` csharp
Class Test
{
public const double Pi = 3.14159365753;
private readonly double Pai = 3.14159365753;
}
```
## 7. 介面
1. 介面定義使用Pascal規則,且必須以大寫“I”開頭。
2. 介面名稱要有意義,中間不要有下劃線“_”等字元。
3. 如果類實現了介面,名稱儘量和介面相同, 只是省掉“I”字元。
規則 7
``` csharp
interface ITest
{
...
}
```
## 8. 事件
1. 委託名稱採用Pascal規則,即開頭字元大寫。
2. 定義事件的委託要使用EventHandler字尾,且包括sender和e兩個參數。
3. 事件用到的參數,名稱要帶EventArgs字尾。
規則 8
``` csharp
Class Test
{
private delegate void DoTask();
private event DoTask DoTaskEventHandler;
private event DoTask DoTaskEventHandler(Object sender,EventArgse);
private event DoTaskDoTaskEventHandler2(string strEventArgs)
}
```
## 9. 命名空間
1. 名稱空間名稱採用Pascal規則,且開頭字元大寫。
2. 名稱空間名稱儘量反映其內容所提供的整體功能。
規則 9
``` csharp
namespace MyTest
{
Class Test
{
...
}
...
}
```
# 第2章 註解規範
## 1. 檔案標頭
1. 檔案都包含檔案標頭, 要說明檔名、作者、建立時間、變更記錄。
2. 推薦採用.NET形式書寫頭部註釋。(待考查)
## 2. 類別及成員
1. 對方法和類別使用“///”三斜線註釋。
2. 程式碼行文註釋採用“//”和“/**/”進行,應該儘量說明問題。
# 第3章 內文規範
## 1. 縮寫規範
1. 識別符號應當直觀可望文知意,不提倡使用任何縮寫。
2. 字串變數推薦是用“str”或“s”開頭,採用string.Empty來初始化。
3. 普通物件可以以“obj”開頭。
4. 縮寫可自行定義,一般取單詞的前/後字元組成,以含義直觀為準則。
5. 一般情況下不要讓縮寫破壞識別符號的含義。
## 2. 排版
1. 每行語句至少佔一行,如果語句過長(超過一個螢幕),則該語句斷為兩行顯示。
2. 把相似的內容放在一起,比如欄位、屬性、方法、事件等,使用“#region--#endregion”命令分組。
3. 多個程式元素進行對等操作時, 邏輯運算子之前、之後或者前後都要加空格。
4. 每個方法的源程式行數原則上應該少於200行。(如果超過過多,則需要另寫一方法)
5. 語句巢狀層次不得超過3層。
6. 避免相同的程式碼段在多個地方出現。(儘量避免程式碼重複,能重複利用則重複利用)
## 3. 語句結構
1. 如果使用了異常結構,一定要處理異常, 一般是要寫日誌檔案。
2. 分支語句不應該使用複雜長條件, 應該將長條件封裝成方法。
3. switch語句,case後面必須接break。
4. 禁止使用goto語句進行跳轉。
5. 行文中嚴禁出現“魔術數字”,特定含義的常數必須定義成列舉或常量。
6. 不同型別的操作符混合使用時,使用括號給出優先順序。
7. 不允許使用複雜的邏輯運算子組合等。
8. 迴圈、判斷語句的程式塊部分用大括號括起來, 即使只有一條語句。(return;待議)
9. 在switch語句中總是要有default字句,建議使用斷言。
10. 每個類別和方法完成單一的功能,不設計多用途面面俱到的類別或方法。
11. 嚴禁使用未經初始化的變數,變數通常使用構造方法來初始。
## 4. 代碼縮排
1. 碰到大括號要換行。
2. 不允許使用Java中的括號換行規範。
## 5. 大小寫
1. 不要建立名稱相同,但大小寫區別的任何元素。
2. 不要把易混淆的數字和字元放在一起。
3. 使用英文命名識別符號。
## 6. 重複名稱
1. 不允許變數名、類別名、屬性名、 方法名等與系統識別符號重名。(系統識別符號見附表)
## 7. SQL編碼
1. SQL語句全部大寫。
2. 對較為複雜的SQL語句加上註釋,說明其功能。
3. 連線符OR、IN、AND、以及=、<=、>=等前後加空格。
4. 使用明確的列代替 SELECT *。
## 8. 軟體架構
1. 資料庫中每一張表對應一個實體類/資料傳輸物件(DTO)。
2. 實體類名稱使用表名,也可帶有Dto字尾。
3. 三層架構應當合理使用,不應生搬硬套。
4. 三層架構元素推薦使用字尾:
| 項目 | 命名 |
|-----------------|------------------------------|
| 資料傳輸物件 | XxxDAOFactory |
| DAO工廠 | XxxDAOFactory |
| DAO介面 | IXxxxDAO |
| 服務介面 | IxxxxService |
| DAO的資料庫實現 | XxxxDAOOracle/XxxxDAOInfomix |
| 業務邏輯 | XxxxManager |
## 9. 系統
1. 系統輸入、資源操作(如記憶體分配、檔案及目錄操作)、網路操作(如通訊、呼叫等)、任務間的操作(如通訊、呼叫等)時必須進行錯誤、超時、或則異常處理。
2. 模組的編寫應有完善的測試方面的考慮。
# 第4章 常見變數命名規則
## CamelCase(駝峰式命名法, camelCase)
中文是完全照自命上去翻譯,就像駱駝的峰一樣。
- 命名方式:通常是只第一單字小寫,其他單字大寫的情況。
- 例子:getVariableName,cartItems,testHowToGetAName等
- 常用場景:適用於一般變數/方法。
有人會依第一個字母的大小寫分為兩類:Lower Camel Case, Upper Camel Case,不過Upper Camel Case又稱為Pascal Case,所以比較少人這樣稱呼。
又因這個特性,所以有人會以camelCase稱呼,剛好第一個字小寫,第二個字大寫。
## Pascal Case(Pascal Case)
如上面所述,有人也稱它為Upper Camel Case,泛指所有單字第一個自都大寫的命名方式。
- 命名方式:單字都大寫。
- 例子:UserRepository。
- 常用場景: Class名稱。。
## Snake Case(Snake_Case)
如字面的意思,像蛇一樣,所以是用底線連結。
- 命名方式:在單字間加入底線。
- 例子:ITEM_TYPE, created_at, updated_at等。
- 常用場景:const變數名稱,資料庫欄位名稱。
## Kebeb Case(Kebeb-Case)
Kebeb本身是烤肉串的意思,變數就像烤肉串一樣串在一起。
- 命名方式:在單字間加入破折號hyphen。
- 例子:good-to-eat, cart-item。
- 常用場景:通常會用在網址。如本篇的naming-convention
# 第4章 參考資料
- [我自己總結的C#開發命名規範整理了一份](https://www.itread01.com/content/1548747388.html)
- [常見變數命名規則(Naming convention)](https://dustinhsiao21.github.io/laravel/naming-convention/)
# 附表1 各種型別命名規範總結
| 型別 | 命名規則 | 注意事項 | 例項 |
|----------------|----------|---------------|-----------------------|
| 類別或結構 | Pascal | 開頭字元大寫 | HttpContext |
| 介面 | Pascal | 前綴I | IDataAdaper |
| 列舉名 | Pascal | 開頭字元大寫 | CommandType |
| 列舉值 | Pascal | 開頭字元大寫 | CommandType.Text |
| 事件 | Pascal | 開頭字元大寫 | SelectedIndexChanged |
| 自定義異常 | Pascal | 後綴Exception | ArgumentException |
| 類公共欄位 | Pascal | 開頭字元大寫 | MaxValue(或_MaxValue) |
| 方法 | Pascal | 開頭字元大寫 | ToString() |
| 名稱空間 | Pascal | 開頭字元大寫 | System.Xml |
| 屬性 | Pascal | 開頭字元大寫 | BackColor |
| 保護或私有欄位 | Camel | 開頭字元小寫 | myVariable |
| 引數 | Camel | 開頭字元小寫 | cmdText |
# 附表2 資料型別縮寫規則
| 資料型別 | 資料型別縮寫 | 標準命名例項 |
|------------------|--------------|--------------|
| Byte | bt | btImages |
| SByte | sbt | sbtImages |
| Short | s | sHandle |
| Unsigned Short | ushort | ushortHandle |
| Integer | i | iNumber |
| Unsigned Integer | uint | uintNumber |
| Long | l | lNumber |
| Unsigned Long | ulong | ulongNumber |
| Float | f | fPrice |
| Double | d | dPrice |
| Decimal | dec | decPrice |
| Char | ch | chCode |
| Bool | is | isVisable |
| Object | obj | objCloth |
| Unit | u | uAge |
| String | str | strName |
| DateTime | dat | datDay |
| Struct | st | stStudent |
| Window | wnd | wndMain |
| ArrayList | lst | lstStudents |
| Array | arr | arrStudents |
| List | list | listData |
| Hashtable | ht | htStudents |
# 附表3 Windows控制元件撰寫規則
直接使用winform元件名添加底線後面接命名
| 控制元件型別 | 控制元件名稱 | 範例 |
|:-----------------|:------------------|:------------------------|
| label | 標籤 | label_Message |
| LinkLabel | 超連結標籤 | LinkLabel_Today |
| Button | 按鈕 | Button_Save |
| TextBox | 文字方框 | TextBox_Name |
| MainMenu | 主選單 | MainMenu_File |
| CheckBox | 核取方框 | CheckBox_Stock |
| RadioButton | 單選按鈕 | RadioButton_Selected |
| GroupBox | 群組方框 | GroupBox_Main |
| PictureBox | 圖片方框 | PictureBox_Image |
| Panel | 面板 | Panel_Body |
| DataGrid | 數據顯示表格 | DataGrid_View |
| ListBox | 列舉方框 | ListBox_Products |
| CheckedListBox | 多選框列舉框 | CheckedListBox_Items |
| ComboBox | 下拉式方框 | ComboBox_Style |
| ListView | 列表檢視 | ListView_Alarms |
| TreeView | 樹狀檢視 | TreeView_Files |
| TabControl | 分頁控制 | TabControl_Mode |
| DateTimePicker | 日期時間選擇器 | DateTimePicker_Hours |
| HscrollBar | 水平捲軸 | HscrollBar_Move |
| VscrollBar | 垂直捲軸 | VscrollBar_PowerControl |
| Timer | 計時器 | Timer_ReadStatus |
| ImageList | 圖片列舉器 | ImageList_Images |
| ToolBar | 工具欄 | ToolBar_Manage |
| StatusBar | 狀態欄 | StatusBar_FoorPrint |
| OpenFileDialog | 檔案開啟對話方塊 | OpenFileDialog_File |
| SaveFileDialog | 檔案儲存對話方塊 | SaveFileDialog_Save |
| FoldBrowserDialog | 資料夾檢視對話方塊 | FoldBrowserDialog_Folder |
| FontDialog | 字體選擇對話方塊 | FontDialog_Font |
| ColorDialog | 顏色選擇對話方塊 | ColorDialog_Color |
| PrintDialog | 列印選擇對話方塊 | PrintDialog_Print |
# 附表4 資料庫物件撰寫規則
直接使用資料庫元件名添加底線後面接命名
| 資料庫物件 | 範例 |
|:--------------|:----------------------|
| Connection | Connection_Northwind |
| Command | Command_ReturnProducts |
| Parameter | Parameter_ProductID |
| DataAdapter | DataAdapter_Products |
| DataReader | DataReader_Products |
| DataSet | DataSet_Northwind |
| DataTable | DataTable_Product |
| DataRow | DataRow_Number |
| DataColumn | DataColumn_Items |
| DataRelation | DataRelation_OtherData |
| DataView | DataView_AllData |