良好的命名慣例是程式碼可讀性、可維護性的基石。C# 社群有明確、廣泛遵循的命名標準(Microsoft 官方指南、Framework Design Guidelines)。本文系統整理**帕斯卡命名法**、**駝峰命名法**、**匈牙利命名法**在 C# 中的定義、適用範圍、對照表與實務範例,助你寫出專業級程式碼。
| 命名法 | 格式 | C# 主要用途 | 範例 |
|---|---|---|---|
| 帕斯卡 (PascalCase) | 每單字首字母大寫 | **公用成員**:類別、介面、方法、屬性、事件、常數、命名空間、列舉值 | CustomerName, CalculateTotal, MaxConnections |
| 駝峰 (camelCase) | 首單字小寫,其餘大寫 | **私有/區域**:區域變數、參數、私有欄位 (不建議加底線) | customerName, totalAmount, maxConnections |
| 匈牙利 | 前綴(型態/用途) + 帕斯卡/駝峰 | **C# 不推薦** (僅少數 UI 控制項名稱慣例殘留) | txtUserName, btnSubmit (WinForms 習慣) |
IO, XML, HTML) → XmlDocument, HtmlEncoder (Framework 指南建議**僅首字母大寫**,但兩字母縮寫慣用全大寫)。ID, OK) → UserId (帕斯卡) / userId (駝峰)。Json, Sql, Html)。| 元素 | 慣例 | 範例 | 備註 |
|---|---|---|---|
| 命名空間 | 帕斯卡 | MyCompany.Products.Utils | Company.Technology.Feature |
| 類別/結構/介面/列舉/委派 | 帕斯卡 | Customer, IComparable, DayOfWeek | 介面慣加 I 前綴 |
| 公用/受保護欄位 | 帕斯卡 | public int MaxRetries; | **建議改用屬性** |
| 屬性 | 帕斯卡 | public string FirstName { get; set; } | |
| 方法 | 帕斯卡 | public void SaveChanges() | 動詞或動詞片語 |
| 事件 | 帕斯卡 | public event EventHandler Clicked; | 名詞/動詞片語,處理器加 Handler 後綴 |
| 常數 | 帕斯卡 | public const int DefaultPort = 80; | 不加底線分隔 |
| 參數 | 駝峰 | void Send(string emailAddress) | |
| 區域變數 | 駝峰 | var userList = new List<User>(); | |
| 私有/內部欄位 | 駝峰 (+ 可選 _ 前綴) | private int _retryCount; 或 retryCount | **團隊統一即可**,_ 前綴助辨識 |
| 型別參數 | 帕斯卡 + T 前綴 | TEntity, TKey, TValue | 單字母 T 亦可 |
Async → GetDataAsync()。Is, Can, Has, Should → IsValid, CanExecute。Orders, Items (而非 OrderList)。I → IUserService → UserService。strUserName 不如 userName 自然。var items = new List<string>(); 前綴何用?唯一例外:WinForms/WPF 控制項欄位命名慣例 (txtName, btnSave, dgvUsers) 仍廣泛使用,因設計器產生代碼、事件綁定慣例所致。新專案建議改用純語意命名 (nameTextBox, saveButton)。
在專案根目錄加入 .editorconfig,IDE 即可即時提示/自動修正:
root = true
[*.cs]
# 命名風格
dotnet_naming_style.pascal_case.capitalization = pascal_case
dotnet_naming_style.camel_case.capitalization = camel_case
# 公用成員必須帕斯卡
dotnet_naming_rule.public_members_must_be_pascal.symbols = public_members
dotnet_naming_rule.public_members_must_be_pascal.style = pascal_case
dotnet_naming_rule.public_members_must_be_pascal.severity = warning
# 參數/區域變數必須駝峰
dotnet_naming_rule.locals_parameters_camel.symbols = locals_parameters
dotnet_naming_rule.locals_parameters_camel.style = camel_case
dotnet_naming_rule.locals_parameters_camel.severity = warning
# 符號定義
dotnet_naming_symbols.public_members.applicable_kinds = property,method,field,event,delegate
dotnet_naming_symbols.public_members.applicable_accessibilities = public,internal,protected,protected_internal
dotnet_naming_symbols.public_members.required_modifiers = readonly
dotnet_naming_symbols.locals_parameters.applicable_kinds = local,parameter
**命名是給人看的,順便給編譯器過目。** 遵循 C# 慣例:
統一命名風格,是專業團隊最低成本、最高回報的品質投資。