Microsoft 擴充設計方針規則程式碼分析規則集
「Microsoft 擴充設計方針規則」規則集會擴大基本設計方針規則的範圍,讓回報的使用性和維護性問題達到最大的功效。 另外還強調命名方針。 如果專案包含程式庫程式碼或您想強制最高標準來撰寫容易維護的程式碼,則應考慮包含這個規則集。
「擴充設計方針規則」包含「Microsoft 基本設計方針規則」的所有規則。 「基本設計方針規則」包含「Microsoft 最小建議規則」的所有規則。 如需詳細資訊,請參閱 Microsoft 基本設計方針規則程式碼分析規則集和 Microsoft 最小建議規則:程式碼分析規則集。
下表說明「Microsoft 擴充設計方針規則」規則集中的所有規則。
規則 |
說明 |
---|---|
請確定每個命名空間都有邏輯組織,而且有合理的原因可以將型別置於沒有嚴密填入的命名空間中。 |
|
以傳址方式傳遞型別時 (使用 out 或 ref),您需要擁有使用指標的經驗、了解實值型別和參考型別之間的差異,並處理具有多個傳回值的方法。 此外,out 和 ref 參數之間的差異一般人不甚了解。 |
|
介面是用來定義一組可提供行為或程式使用合約的成員。 不論型別出現在繼承階層架構 (Inheritance Hierarchy) 中的何處,任何型別都可以採用介面所描述的功能。 型別會實作介面,方法是提供介面成員的實作。 空白介面不會定義任何成員,因此也不會定義能夠實作的合約。 |
|
以傳址方式傳遞型別時 (使用 out 或 ref),您需要擁有使用指標的經驗、了解實值型別和參考型別之間的差異,並處理具有多個傳回值的方法。 目標為一般使用者的程式庫架構設計人員不應預期使用者會熟練地運用 out 或 ref 參數。 |
|
所有傳遞至外部可見方法的參考引數都應經過 null 檢查。 |
|
型別在其繼承階層架構 (Inheritance Hierarchy) 中超過四個層級的深度。 太深的巢狀型別階層架構可能會難以依循、了解和維護。 |
|
執行個體欄位名稱的開頭為 "s_",或是 static (在 Visual Basic 中為 Shared) 欄位名稱的開頭為 "m_"。 |
|
型別或方法的維護性指標值很低。 維護性指標很低代表型別或方法很可能會難以維護,而應該列為需要重新設計的候選目標。 |
|
這個規則會測量類別的耦合,方法是計算型別或方法包含的唯一型別參考數目。 |
|
這項規則假設名稱中包含 "reserved" 的列舉型別成員目前並未使用,但是在未來版本會是重新命名或移除的替代符號 (Placeholder)。 重新命名或移除成員是中斷變更。 |
|
資源字串中的每個字都可依大小寫分割成語彙基元 (Token)。 連續兩個語彙基元的組合都由 Microsoft 拼字檢查程式庫進行檢查。 如果可以辨識,這個字便會產生規則違規。 |
|
識別項的名稱包含多個單字,而其中至少有一個單字是大小寫不正確的複合字。 |
|
資源字串包含一個或多個 Microsoft 拼字檢查程式庫無法辨識的字。 |
|
外部可見識別項的名稱包含一個或多個 Microsoft 拼字檢查程式庫無法辨識的字。 |
|
根據慣例,識別項名稱不包含底線 (_) 字元。 此規則會檢查命名空間、型別、成員和參數。 |
|
根據慣例,參數名稱是使用 Camel 命名法的大小寫慣例,而命名空間、型別和成員名稱則使用 Pascal 命名法的大小寫慣例。 |
|
依照慣例,擴充某些基底型別 (Base Type) 或實作某些介面的型別名稱,或從這些型別衍生的型別,都具有與基底型別或介面關聯的後置字元。 |
|
依照慣例,只有擴充特定基底型別 (Base Type) 或實作特定介面的型別名稱,或是從這些型別衍生的型別名稱,應以特定保留的後置字元結尾。 其他型別名稱不得使用這些保留的後置字元。 |
|
因為型別資訊必須由開發工具提供,所以列舉型別成員的名稱不能以型別名稱做為開頭。 |
|
事件的名稱會以 "Before" 或 "After" 為開頭。 若要命名在特定序列 (Sequence) 中引發的相關事件,請使用現在式或過去式表示動作序列相對的位置。 |
|
公用的列舉具有 System.FlagsAttribute 屬性,而且其名稱不能以 "s" 做結尾。 以 FlagsAttribute 標記的型別擁有複數形的名稱,因為這個屬性表示可以指定一個以上的值。 |
|
外部可見介面的名稱沒有以大寫 "I" 開頭。 外部可見型別或方法上泛型型別參數的名稱沒有以大寫 "T" 開頭。 |
|
依照命名規範的要求,列舉的複數名稱代表可以同時指定多個列舉值。 |
|
參數名稱應該要能傳達參數的意義,而成員名稱應該要能傳達成員的意義。 兩者相同屬罕見的設計。 如果將參數命名為與成員名稱相同的名稱,則不僅會不容易了解,也會讓程式庫難以使用。 |
|
外部可見成員中的參數名稱包含資料型別名稱,或外部可見成員的名稱包含語言特定的資料型別名稱。 |
|
公用或保護之成員的名稱是以 "Get" 開頭,否則需符合公用或保護之屬性的名稱。" Get" 方法和屬性應該具有能清楚區分函式的名稱。 |
|
根據慣例,只有特定程式設計項目的名稱會以特定的前置字元做為開頭。 |
|
型別名稱不得符合 .NET Framework Class Library 中定義的命名空間名稱。 違反此規則會降低程式庫的可用性。 |
|
在覆寫階層架構中一致的參數命名方式,會增加方法覆寫的可用性。 與基底宣告中的名稱不同之衍生方法中的參數名稱,可能會造成方法為基底方法的覆寫或為方法的新多載而混淆。 |
|
外部可見的識別項名稱包含有替代慣用詞彙存在的詞彙。 或者該名稱包含 "Flag" 或 "Flags" 一詞。 |
|
方法主體中的常值 (Literal) 字串包含一個或多個 Microsoft 拼字檢查程式庫無法辨識的字。 |