探秘泛型:類型參數化革命
泛型是 C# 和.NET
框架中一項革命性的特性,它實現了 “編寫一次,多處復用” 的抽象能力,同時保持了靜態類型的安全性和高性能。與 C++ 模板等其他語言的泛型機制不同,.NET 泛型在 CLR(公共語言運行時)層面提供原生支持,這使得它兼具靈活性、安全性和效率。本文將從.NET 框架底層出發,全面解析泛型的類型系統、實現機制、性能特性及高級應用,揭示其在 CLR 中的運行原理。
一、泛型的類型系統:CLR 的類型參數化革命
在泛型出現之前,.NET 通過object
類型實現通用代碼(如ArrayList
),但代價是頻繁的裝箱 / 拆箱和類型轉換。泛型的核心創新是類型參數化,允許在定義類型或方法時使用未指定的類型參數,在使用時再指定具體類型。
1. 開放類型與封閉類型:泛型的兩種形態
CLR 將泛型類型分為兩種基本形態:
- 開放類型(Open Type):未指定全部類型參數的泛型類型,如
List<T>
、Dictionary<TKey, TValue>
。這類類型僅存在于編譯期和元數據中,不能直接實例化。 - 封閉類型(Closed Type):已指定所有類型參數的泛型類型,如
List<int>
、Diction