接續上篇,本文涵蓋第 26-50 條核心準則,聚焦於**排序契約、克隆陷阱、轉換操作符、版本管理、CLS 合規、方法粒度、程序集設計、可見性控制、Web API 顆粒度、事件 vs 重寫、診斷框架、配置機制、數據綁定、驗證、集合選型、DataSet 權衡、特性驅動反射、異常設計、互操作邊界、安全編碼、工具鏈掌握、語言版本演進、標準化**。
| # | 準則 | 核心要點 |
|---|---|---|
| 26 | 實現 IComparable/IComparer | 自然排序用 IComparable<T>,自定義排序用 IComparer<T>,重載比較運算符配套 CompareTo。 |
| 27 | 避免 ICloneable | 值類型無需克隆;引用類型用複製構造函數或工廠方法,語義明確。 |
| 28 | 避免隱式/顯式轉換操作符 | 改用構造函數或工廠方法 (FromXxx),避免臨時對象導致的隱性 Bug。 |
| 29 | 謹慎用 new 隱藏基類成員 | 僅在新版本庫導致名稱衝突時使用,文檔說明隱藏意圖。 |
| 30 | 追求 CLS 合規程序集 | 公共/保護成員類型需 CLS 合規;不合規成員提供合規替代;[CLSCompliant(false)] 標記內部實現。 |
| 31 | 編寫短小精悍的方法 | JIT 以方法為單位編譯;短方法利於寄存器分配、內聯、分支預測、未調用不編譯。 |
| 32 | 小尺寸、高內聚程序集 | 公共類/共用基類/工具類同一程序集;相關介面獨立程序集;水平通用類單獨程序集。兩類:小而專、大而全。 |
| 33 | 限制類型可見性 | 用介面暴露功能,實現類標記 internal;公開類型越少,重構自由度越高。 |
| 34 | 設計大顆粒度 Web API | 減少跨機調用頻次與載荷;粗粒度操作下沉服務端,細粒度本地執行。 |
| 35 | 重寫優於事件處理器 | 虛方法無異常中斷鏈、無迭代開銷、性能高;事件適合多訂閱者、運行時動態綁定場景。 |
| 36 | 善用 System.Diagnostics | Debug/Trace/EventLog 內置診斷;勿自造輪子。 |
| 37 | 使用標準配置機制 | Application.LocalAppDataPath/UserAppDataPath;嚴禁寫 Program Files/Windows 目錄。 |
| 38 | 定制數據綁定 | BindingManager/CurrencyManager 驅動 UI-數據同步;擴展至非文本屬性;利用介面適配現有對象。 |
| 39 | 使用 .NET 驗證體系 | ASP.NET 5 種驗證控件 + CustomValidator;WinForms 處理 Validating 事件。 |
| 40 | 按需選集合 | 陣列固定長、擴容貴;List<T> 動態陣列;Dictionary<K,V> O(1) 查找;HashSet<T> 去重;自定義集合實現 IEnumerable<T> + 索引器。 |
| 41 | DataSet 優於自定義結構 | 強類型 DataSet 開發效率極高,雖違純粹 OO 設計,實用主義優先;XML 序列化互操作性一般。 |
| 42 | 特性簡化反射 | 自定義 Attribute 標記可反射成員,編譯期約束減少運行時錯誤。 |
| 43 | 避免濫用反射 | 晚期綁定 Invoke 參數/返回皆 object,類型轉換風險大;優先用介面契約。 |
| 44 | 創建應用專屬異常類 | 僅當「捕獲端需區分處理」時創建;完整實現 4 條構造函數;用 InnerException 保留鏈路。 |
| 45 | 提供強異常安全保證 | 「操作失敗狀態不變」:防御性複製 → 修改副本 → 原子交換;Finalize/Dispose/委託目標**決不拋異常**。 |
| 46 | 最小化互操作 | 三大代價:封送拷貝、托管/非托管切換、混合開發心智負擔;用 blittable 類型、In/Out 屬性、P/Invoke 或 C++/CLI 優化。 |
| 47 | 優先安全代碼 | 避免非托管指針;隔離存儲防非托管/不信任代碼;高權限代碼隔離在獨立程序集。 |
| 48 | 掌握核心工具鏈 | NUnit/xUnit 單測;FxCop/Roslyn Analyzers 靜態分析;ILSpy/dnSpy IL 逆向;PerfView/dotTrace 性能分析。 |
| 49 | 擁抱新語言版本 | C# 2.0 泛型/迭代器 → 3.0 LINQ/Lambda → 4.0 dynamic/協變 → 5.0 async/await → 6.0 字符串插值 → 7.0 模式匹配 → 8.0 介面默認實現 → 9.0 record/init → 10/11/12 持續演進。 |
| 50 | 了解 ECMA-334/335 標準 | C# 語言規範 (ECMA-334) 與 CLI 標準 (ECMA-335) 是跨實現 (Mono, .NET Core, .NET Framework) 可移植性的基石。 |
這 50 條準則不僅是編碼規範,更是**工程化思維**的體現。定期回顧、團隊共識、工具落地,方能將「知道」轉化為「日常」。