「能跑起來」只是門檻,「高效、可維護、專業」才是資深工程師的分水嶺。本文彙整業界公認的 C# 編碼規範,涵蓋命名、排版、架構設計、異常處理與註解藝術,助你從「寫代碼」進化為「造產品」。
| 元素 | 慣例 | 範例 |
|---|---|---|
| 類別/結構/介面 | PascalCase,名詞或名詞片語 | Customer, IComparable |
| 方法 | PascalCase,動詞或動詞片語 | CalculateTotal(), SaveChanges() |
| 屬性/公開欄位 | PascalCase,名詞/形容詞 | FirstName, IsActive |
| 區域變數/參數 | camelCase,語意清晰 | totalCount, userName |
| 常數 | PascalCase(公開)或 UPPER_SNAKE_CASE(私有) | MaxRetryCount, DEFAULT_TIMEOUT |
m_strName, nAge)nam, addr, sal)i, j 外)_ 分隔單字if (x == y) { ... }。{} 獨佔一行(K&R 風格或 Allman 風格二擇一,團隊統一即可)。SavePhoneNumber() 優於 SaveData() + 註解。// ❌ 違反 SRP:一個方法做兩件事
void SaveAddress(string address, string email) {
SaveToDatabase(address);
SendEmail(email);
}
// ✅ 拆分為兩個單一職責方法
void SaveAddress(string address) { /* ... */ }
void NotifySupervisor(string email) { /* ... */ }
int 而非 Int32,string 而非 String,object 而非 Object。const 或 enum。private,對外暴露屬性;避免跨方法共享成員變數,改用區域變數 + 參數傳遞。C:\,使用相對路徑、Path.Combine、AppDomain.CurrentDomain.BaseDirectory。catch (Exception) { return null; } —— 這會掩蓋 Bug。catch (FileNotFoundException ex)。"更新資料庫失敗。請確認登入帳號密碼是否正確。" 而非 "錯誤發生"。AppDomain.UnhandledException、TaskScheduler.UnobservedTaskException)統一捕捉未處理異常,記錄日誌後友善提示並決定是否關閉。try-catch 區塊越小越好,精準包裹可能拋出異常的單一操作。繼承 ApplicationException(非 SystemException),命名以 Exception 結尾,提供建構子鏈。
TODO/HACK 標記。///),支援 IntelliSense 與文件產生器。將規範內化為肌肉記憶,代碼品質自會水到渠成。專業,始於細節。