Skip to main content

C# 命名方針

· 預估閱讀時間: 4 分鐘
Ouch Liu
不務正業的架構師

寫程式其實也是有規矩在的,尤其是要團體協同開發的時候,如果每個人使用的規則都不一樣,那要求每個人看得懂別人的程式碼,真的是會要了人的命。 像是命名空間、類別、變數、檔案命名、控制項命名,其實都要去訂下命名的規則,對團隊來說才會容易溝通。

當然,規則很多,我在這邊只先列出和比較基本的命名相關的規則;而關於完整的 C#的程式撰寫規範建議,則可以參考MSDN 上的設計方針,再配合 FXCop 做程式碼撰寫後的規範驗證。

以下為 C#命名的**一般原則**:

  • 使用**Pascal( 如 : "VirtualDesign" )及'Camel'**( 如 : "virtualDesign" )兩種命名方式,並建議避免使用分隔符號( 例如底線 "_" 或連字號 "-" )來做命名 - CA1702
  • 可讀性優先於簡潔性( CanScrollHorizontally 優於 ScrollableX ),並參考常用的命名( HorizontalAlignment 優於 AlignmentHorizontal )。
  • 避免使用匈牙利命名法( 如 : "strName" ),並正確的使用前置及後置詞命名 - CA1720CA1710
  • 正確的使用縮寫,縮寫字為兩個字母以內,則兩字皆為大寫( 如 : "IO" ),三個字以上,則使用Pascal命名規則( 如 : "Xml" ),且縮寫字不得高於五個字母 - CA1709

C# 物件命名原則

| 種類 | 命名規則 | 範例 | 注意事項 | | -------------------------------------- | ----------------------------------- | ------------------------------------------------------- | ------------------------------------------ | ----------------- | ------------------- | | Project File | Pascal | Math.Algorithm.csproj | | Source File | Pascal | RuleSetup.cs | 保持檔案名稱與 Class 名稱一致 | | Resource or Embedded File | Pascal | TestPicture.jpg | | Namespace | Pascal | MyCompany.Wpf.Controls | 儘量使用"公司名稱.專案名稱 | 技術名稱.功能分類 | 子類別"做為命名準則 | | Class or Struct | Pascal | CustomAttribute | 使用名詞命名,並使用基底類別名稱做為後置詞 | | Interface | Pascal | ICustomer | 使用前置詞"I" | | Generic Class & Generic Parameter Type | Pascal | TKey,TValue | 使用前置詞"T"或"K" | | Method | Pascal | ValidateUser | 使用動詞作為開頭 | | Property | Pascal | Name | 避免使用"Get"或"Set"當前置詞 | | Field (Public, Protected, or Internal) | Pascal | Name | | Field (Private) | Camel | _name | 字首加上底線做為區隔 | | Constant or Static Field | Pascal | Name | 與 Field 處理方式相同 | | Enum | Pascal | EncodeType | 裡面包含選項也是使用 Pascal 命名法 | | Delegate or Event | Pascal | public event EventHandler LoadPlugin | 全都使用 Pascal 命名規則 | | Local Variable (inline) | Camel | string name | 避免使用單一字元和列舉的名稱 | | Parameter | Camel | public void Execute(string commandText, int iterations) |

其他注意事項:

  • 不要在列舉項目中使用"Reserved"做為命名 - CA1700
  • 不要使用型別名稱做為列舉值的前置字元 - CA1712