本文為 C# 程式碼規範第二部分,涵蓋陳述式格式、控制項命名慣例、程式結構原則、例外處理策略與其他進階規範。
第六章 陳述式規範
6.1 每行一個陳述式
a++; // 推薦
b--; // 推薦
a++; b--; // 不推薦
6.2 複合陳述式
- 子陳述式縮排
- 左大括號另起一行並與父陳述式對齊
- 即使單行也必須加大括號
while (d += s++) {
n++;
}
6.3 return 陳述式
不加括號,除非增加清晰度:
return;
return myDisk.Size();
return (size ? size : defaultSize);
6.4-6.9 控制流程陳述式標準格式
if/else、for/foreach、while、do-while、switch-case、try-catch-finally、using 皆採一致大括號風格與縮排。
switch 關鍵規則:每個 case 佔一行、按字母排序、必須有 default、非空 case 必須以 break 結束。
第七章 控制項命名規則
格式:控制項縮寫 + 英文描述(首字大寫)
| 控制項 | 縮寫 | 控制項 | 縮寫 |
| Label | lbl | TextBox | txt |
| Button | btn | LinkButton | lnkbtn |
| DropDownList | ddl | DataGrid | dg |
| CheckBox | chk | RadioButton | rdo |
| RequiredFieldValidator | rfv | RegularExpressionValidator | rev |
第八章 程式結構規範
8.1 結構原則
- 單一函數不超過 100 行,檔案不超過 2000 行
- 方法 1-25 行為宜,超過 25 行拆分
- 盡用 .NET 基底類別庫與共用函數
- 避免全域變數,優先區域變數
- 方法名自述功能,避免誤導性命名
- 避免過深巢狀迴圈與條件判斷
- 成員變數不跨方法共享
- 魔術數字改用常數
8.2 撰寫細節
- 命名空間:系統優先,第三方次之,空行分隔
- 類別成員變數置頂,空行與方法隔開
- 避免連續指派
x = y = z
- 離散值使用 enum 而非字串/數字
- 單一職責:一個方法只做一件事
- 括號明確表達運算優先順序
- 陣列以零為基底
- 目錄結構反映命名空間層級
第九章 例外處理
- 嚴禁「吞掉例外」不處理
- 使用者友善訊息 + 詳細錯誤記錄(時間、方法、類別)
- 僅在特定例外可能發生處使用 try-catch
- 拆分細粒度 try-catch 區塊,精準定位錯誤來源
- 捕捉具體例外類型,避免捕捉
Exception
- 錯誤處理優先用例外,勿用回傳值碼
第十章 其他進階規範
- 型別轉換優先用
as 安全轉型
- 程式正確性優於優美,完成後必須回頭檢查
- 修改前評估衝擊範圍
- 所有使用者輸入必須驗證
- 避免浮點數直接比較相等
- 單元測試為開發一環,聯測前必須通過
- 可重用邏輯封裝為服務或類別,遵循 OO 封裝原則
- 勿手動修改機器產生程式碼,善用 partial class
- 組件僅一個
Main 入口
- 最小化 public 介面,內部用 internal
- 避免三元運算子、unsafe 程式碼
- 介面成員與類別成員比約 2:1,介面 3-5 成員為宜
- 結構避免定義方法,建構函數與運算子多載除外
- 能早期繫結避免晚期繫結
this 僅用於建構函數鏈呼叫
base 僅用於建構函數或解決名稱衝突
- 長字串建構必須用
StringBuilder