Home [C# 筆記] 什麼是装箱和拆箱?
Post
Cancel

[C# 筆記] 什麼是装箱和拆箱?

裝箱(Boxing)和拆箱(Unboxing)是與「值類型」和「引用類型」之間轉換相關的概念。

裝箱(Boxing):

裝箱是將值類型(例如 int, char, double 等)轉換為對應的參考類型(通常是 object 類型或介面類型)的過程。

1
2
3
4
5
6
7
8
/*
當值類型裝箱時,會在Heap(堆積)記憶體中建立一個對象,將值類型的值複製到這個對象中,並傳回對對象的參考。
裝箱發生在需要將值類型賦值給參考類型的情況下,或者當值類型需要作為參數傳遞給接受 object 類型的方法時。
*/

//裝箱:將「值類型」轉換為「Object類型」的過程
int i = 10;
object o = i; //裝箱發生在這裡

拆箱(Unboxing):

拆箱是將裝箱過的參考型別轉換回原始值型別的過程。

1
2
3
4
5
6
7
8
/*
當需要從參考類型中取得值類型的值時,需要進行拆箱。拆箱將引用型別中的值複製到一個新的值型別變數中。
拆箱發生在將裝箱後的物件賦值給值類型變數的情況下,或從 object 類型中取得值類型的值時。
*/

//拆箱:從 Object 中提取「值類型」的過程
object O = 10;
int I = (int)O; // 拆箱發生在這裡

需要注意的是,裝箱和拆箱都涉及資料的複製,因此可能會帶來一些效能開銷。在高效能需求的情況下,可以考慮避免不必要的裝箱和拆箱操作。 C# 中的泛型和 Nullable 類型等機制有助於減少這些操作的需求。

C# .NET面试系列一:基础语法

This post is licensed under CC BY 4.0 by the author.