適用於 Managed 程式碼的基本設計方針規則規則集
您可以使用「Microsoft 基本設計方針規則」規則集,將重點放在讓程式碼更易懂又好用。如果專案包含程式庫程式碼或您想強制執行最佳做法以便於維護程式碼,則應包含這個規則集。
「基本設計方針規則」包含「Microsoft 最小建議規則」規則集中的所有規則。如需最小規則的清單,請參閱 適用於 Managed 程式碼的 Managed 建議規則規則集。
下表說明「Microsoft 基本設計方針規則」規則集中的所有規則。
規則 |
描述 |
---|---|
具有可處置欄位的型別應該是可處置的 |
|
正確宣告事件處理常式 |
|
以 AssemblyVersionAttribute 標記組件 |
|
介面方法應該要可以由子型別呼叫 |
|
擁有原生資源的型別應為可處置 |
|
將 P/Invokes 移到 NativeMethods 類別 |
|
不要隱藏基底類別方法 |
|
必須正確實作 IDisposable |
|
不要在非預期的位置中引發例外狀況 |
|
避免使用重複的快速鍵 |
|
P/Invoke 進入點應該要存在 |
|
P/Invokes 不應該為可見的 |
|
自動配置型別不應該是 COM 可見的 |
|
必須在 P/Invoke 之後立即呼叫 GetLastError |
|
COM 可見型別的基底型別應該是 COM 可見的 |
|
應該符合 COM 註冊方法 |
|
P/Invokes 必須正確宣告 |
|
必須移除空的完成項 |
|
實值型別欄位應該為可移植的 |
|
P/Invoke 宣告應該是可移植的 |
|
請勿鎖定具有弱式識別的物件 |
|
必須檢視 SQL 查詢中是否有安全性弱點 |
|
必須指定 P/Invoke 字串引數的封送處理 |
|
必須檢查實值型別上的宣告式安全性 |
|
指標不應該為可見的 |
|
受保護型別不應公開欄位 |
|
方法安全性應該是型別的超集合 |
|
APTCA 方法應該只呼叫 APTCA 方法 |
|
APTCA 型別應該只擴充 APTCA 基底型別 |
|
不要間接公開具有連結要求的方法 |
|
覆寫連結要求應該與基底相同 |
|
必須將有弱點的 finally 子句包裝在外層 try 中 |
|
必須同時具有型別連結要求和繼承要求 |
|
安全性關鍵型別可能未參與型別等價 |
|
預設建構函式至少必須和基底型別的預設建構函式一樣關鍵 |
|
委派必須繫結至透明度一致的方法 |
|
覆寫基底方法時,方法必須保持一致的透明度 |
|
透明方法必須只包含可驗證的 IL |
|
透明方法不可以使用 SuppressUnmanagedCodeSecurity 屬性呼叫方法 |
|
透明程式碼不可以參考安全性關鍵項目 |
|
透明方法不可以滿足 LinkDemand |
|
型別至少必須和基底型別與介面一樣關鍵 |
|
透明的方法不可以使用安全性判斷提示 |
|
透明方法不可以呼叫機器碼 |
|
請重新擲回以保存堆疊詳細資料 |
|
不要多次處置物件 |
|
必須初始化實值型別的靜態內嵌欄位 |
|
不要以 WebMethod 標記 Serviced 元件 |
|
可處置的欄位應該受到處置 |
|
不要呼叫建構函式中的可覆寫方法 |
|
可處置型別應該宣告完成項 |
|
完成項應該呼叫基底類別完成項 |
|
請實作序列化建構函式 |
|
覆寫 ValueType.Equals 時必須一併多載等號比較運算子 |
|
以 STAThread 標記 Windows Form 進入點 |
|
必須標記所有不可序列化的欄位 |
|
必須呼叫 ISerializable 型別上的基底類別方法 |
|
必須以 SerializableAttribute 標記 ISerializable 型別 |
|
請正確實作序列化方法 |
|
必須正確實作 ISerializable |
|
必須提供格式化方法的正確引數 |
|
必須正確地測試 NaN |
|
不要在泛型型別上宣告靜態成員 |
|
不要公開泛型清單 |
|
必須使用一般事件處理常式執行個體 |
|
泛型方法應該提供型別參數 |
|
避免在泛型型別上包含過多參數 |
|
不要在成員簽章中巢狀化泛型型別 |
|
建議在適當時使用泛型 |
|
列舉值中應該要有值為零的成員 |
|
集合應該實作泛型介面 |
|
建議將基底型別當做參數傳遞 |
|
抽象型別不應具有建構函式 |
|
多載加號和減號運算子時必須一併多載等號比較運算子 |
|
以 CLSCompliantAttribute 標記組件 |
|
以 ComVisibleAttribute 標記組件 |
|
以 AttributeUsageAttribute 標記屬性 |
|
必須定義屬性引數的存取子 |
|
不應該使用多維索引子 |
|
建議在適當時使用屬性 |
|
必須以參數陣列取代重複的引數 |
|
不應使用預設參數 |
|
必須以 FlagsAttribute 標記列舉 |
|
列舉儲存區應該是 Int32 |
|
建議在適當時使用事件 |
|
不要攔截一般例外狀況型別 |
|
必須實作標準例外狀況建構函式 |
|
巢狀型別不應為可見 |
|
ICollection 實作包含強型別成員 |
|
必須在 Comparable 型別中覆寫方法 |
|
列舉程式應該是強型別 |
|
清單為強型別 |
|
提供 ObsoleteAttribute 訊息 |
|
必須針對索引子使用整數類或字串引數 |
|
屬性不應為唯寫 |
|
請勿多載參考型別上的等號比較運算子 |
|
密封型別不應該宣告 protected 成員。 |
|
不要在密封型別中宣告 virtual 成員 |
|
在命名空間中宣告型別 |
|
不要宣告可見的執行個體欄位 |
|
靜態預留位置型別應該為密封的 |
|
靜態預留位置型別不應包含建構函式 |
|
URI 參數不應該為字串 |
|
URI 傳回值不應該為字串 |
|
URI 屬性不應該為字串 |
|
字串 URI 多載呼叫 System.Uri 多載 |
|
型別不應該擴充特定的基底型別 |
|
成員不應該公開特定的具象型別。 |
|
例外狀況必須是公用 |
|
變數名稱不應該與欄位名稱相符 |
|
避免過度複雜 |
|
識別項名稱不應該只靠大小寫區別 |
|
識別項名稱不應該和關鍵字相符 |
|
必須檢視未使用的參數 |
|
必須移除未使用的區域變數 |
|
避免使用過多區域變數 |
|
必須初始化參考型別內部的靜態欄位 |
|
避免使用未呼叫的私用程式碼 |
|
避免使用未執行個體化的內部類別 |
|
避免使用非密封屬性 |
|
建議使用不規則陣列取代多維陣列 |
|
覆寫實值型別上的等號和等號比較運算子 |
|
屬性不應傳回陣列 |
|
應該使用字串長度測試空白字串 |
|
將成員標記為靜態 |
|
避免包含未使用的私用欄位 |
|
不要引發保留的例外狀況型別 |
|
必須使用 Win32 API 的 Managed 對應項 |
|
請正確執行個體化引數例外狀況 |
|
非常數欄位不應該為可見的 |
|
不要以 FlagsAttribute 標記列舉 |
|
不要在 exception 子句中引發例外狀況 |
|
完成項應該受到保護 |
|
請勿降低繼承成員的可視性 |
|
成員不應該只有在傳回型別上不同 |
|
多載等號比較運算子時必須一併覆寫 Equals |
|
運算子多載必須有具名的替代方法 |
|
運算子應該有對稱的多載 |
|
集合屬性應該為唯讀 |
|
必須使用 params 做為變數引數 |
|
必須傳遞 System.Uri 物件,而不要傳遞字串 |
|
必須為選擇性欄位提供還原序列化方法 |