C# 4.0 引入 dynamic 關鍵字,本意是簡化 COM 互操作、動態語言互通與匿名型別跨方法傳遞。然而現實中,大量開發者將其視為「萬能鑰匙」,導致效能損耗、智能感知失效、執行時錯誤延遲暴露等嚴重後果。
| 特性 | var | dynamic |
|---|---|---|
| 型別確定時機 | 編譯期(靜態型別) | 執行期(動態繫結) |
| IntelliSense | 完整支援 | 完全失效 |
| 效能 | 零額外成本 | DLR 快取/呼叫開銷 |
| 適用範圍 | 區域變數 | 欄位、屬性、回傳值、參數 |
reflection 呼叫 Excel/Word/舊版 ActiveXdynamic 可避免定義 DTO(但建議改用 Tuple/Record)擴展方法本質是「靜態方法的語法糖」,只適用於三種情境:
string, IEnumerable)若在專案內部大量定義擴展方法,會造成「方法汙染」:IntelliSense 列表膨脹、命名衝突風險、語意歸屬模糊。請嚴格限制在 Extensions 命名空間與專用靜態類別中。
泛型優勢在於型別安全與避免裝箱/拆箱。濫用表現:
List<object>:完全喪失型別檢查,不如用 ArrayList 誠實Dictionary<string, List<Tuple<int, Func<T>>>>):編譯緩慢、除錯困難每個語言特性都有其設計初衷與適用邊界。盲目跟風使用新特性,本質上是「知其然不知其所以然」。珍愛程式碼品質,遠離盲目跟風——這才是資深工程師的底色。