首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Effective C# 原則 49:為 C# 2.0 做好準備 (2) - 泛型深度解析與效能優勢

     編輯:關於C語言

泛型類別定義與型別安全

傳統集合儲存 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>(); 編譯器保證集合只能存儲整數,編譯期即可攔截型別錯誤。

效能優勢:消除裝箱/拆箱

  • 值型別:JIT 為每個值型別產生專屬實體,避免裝箱/拆箱開銷
  • 參考型別:共享單一執行時版本(儲存 System.Object),避免程式碼膨脹
  • 兩者皆保持編譯期型別檢查

MSIL 層面的實作機制

編譯泛型類別時,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 代表第一個型別參數的佔位符,實例化時才具體化。這種設計在型別安全、效能與程式碼大小間取得平衡。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved