Home [C# 筆記] 裝箱與拆箱(Boxing & Unboxing)
Post
Cancel

[C# 筆記] 裝箱與拆箱(Boxing & Unboxing)

「實值型別」與「參考型別」其間的轉換動作,便構成了BoxingUnboxing

裝箱(Boxing)

將「實值型別」轉換成「參考型別」的過程。

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

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

Boxing處理「實值型別(Value Type)」時,會將型別封裝到Object參考型別的執行個體(Instance)內。

折箱(Unboxing)

將「參考型別」轉換成「實值型別」的過程。

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

1
2
3
//拆箱:從 Object 中提取「值類型」的過程
object o = 10;
int i = (int)o; //折箱Unboxing發生在這裡, 就是把基本數據類型,從物件中打開提取出來,

Unboxing在處理「參考型別(Reference Type)」時,會從物件中擷取「實值型別」。
(就是把基本數據類型,從物件中打開提取出來,)

注意

不管是「裝箱」還是「拆箱」,都會有比較明顯的性能問題,因為這些操作,都涉及額外的物件創建和銷毀的工作。

  • 不管是「裝箱」還是「拆箱」,都會有比較明顯的性能問題
  • 因為這些操作,都涉及額外的物件創建和銷毀

[C# 筆記] 裝箱(Boxing) vs 拆箱(Unboxing) by R
[C# 筆記] 什麼是装箱和拆箱? by R
Book: Visual C# 2005 建構資訊系統實戰經典教本

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

[C# 筆記] 實值型別與參考型別(Value Type & Reference Type)

[C# 筆記] 隱含轉換 & 明確轉換 (Implicit conversion & Explicit conversion)