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

C# 裝箱轉換完整指南:從實值類型到物件的隱含與顯式轉換

     編輯:關於C語言

裝箱 是 C# 類型系統中連結實值類型與引用類型的關鍵機制。它指將一個實值類型(如 int、struct、enum)隱含或顯式轉換為 object 類型,或該實值類型實作的介面類型。過程中,執行期會在 Managed Heap 上配置一個新的物件實例,並將實值類型的資料複製進去。

裝箱的兩種寫法

隱含裝箱

int i = 10;
object obj = i; // 編譯器自動產生 box 指令

顯式裝箱

int i = 10;
object obj = (object)i; // 明確標示意圖,語意更清晰

底層運作模型

我們可以想像編譯器為每個實值類型 T 產生一個對應的參考類型包裝器:

class T_Box {
    T value;
    public T_Box(T t) { value = t; }
}

當執行 object obj = i; 時,實際相當於 object obj = new Int32_Box(i);。這解釋了為什麼裝箱後的物件與原始變數互不干擾:

程式碼驗證:裝箱建立的是獨立副本

using System;
class Test {
    public static void Main() {
        int i = 10;
        object obj = i; // 裝箱
        if (obj is int) {
            Console.WriteLine("i 已被裝箱!");
        }
        i = 20; // 修改原始值
        Console.WriteLine($"int: i = {i}");      // 輸出 20
        Console.WriteLine($"object: obj = {obj}"); // 輸出 10
    }
}

輸出結果證明:obj 保存的是裝箱當時的值 10,後續對 i 的修改不會影響已裝箱的物件。這正是「值語意」在參考類型容器中的體現。

裝箱過程示意圖

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