傳統集合儲存 System.Object 參考,存取時需強制轉型且不具型別安全。泛型讓您定義型別參數化的類別:
public class List<ItemType>
{
private class Node<ItemType>
{
internal ItemType val;
internal Node<ItemType> next;
}
private Node<ItemType> first;
public void AddHead(ItemType t) { /* ... */ }
public ItemType Head() { return first.val; }
}
使用時指定具體型別:List<int> intList = new List<int>(); 編譯器保證集合只能存儲整數,編譯期即可攔截型別錯誤。
System.Object),避免程式碼膨脹編譯泛型類別時,MSIL 為每個參數化型別保留佔位符:
.method public AddHead (!0 t) { }
.method public !0 Head () { }
實例化時替換為具體型別:
.method public AddHead (System.Int32 t) { }
.method public System.Int32 Head () { }
.locals (class List<int>)
newobj void List<int>::.ctor()
!0 代表第一個型別參數的佔位符,實例化時才具體化。這種設計在型別安全、效能與程式碼大小間取得平衡。