装箱用于在垃圾回收堆中存储值类型。装箱是值类型(C# 参考)到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。
请看以下值类型变量的声明:
C# | ![]() |
---|---|
int i = 123; |
以下语句对变量 i
隐式应用装箱操作:
C# | ![]() |
---|---|
object o = i; // implicit boxing |
此语句的结果是在堆栈上创建对象引用 o
,而在堆上则引用 int 类型的值。该值是赋给变量 i
的值类型值的一个副本。下图说明了两个变量 i
和 o
之间的差异。

还可以像下面的示例一样显式执行装箱,不过显式装箱从来不是必需的:
C# | ![]() |
---|---|
int i = 123; object o = (object) i; // explicit boxing |
示例
此示例通过装箱将整数变量 i
转换为对象 o
。这样,存储在变量 i
中的值就从 123
更改为 456
。该示例表明原始值类型和装箱的对象使用不同的内存位置,因此能够存储不同的值。
C# | ![]() |
---|---|
class TestBoxing { static void Main() { int i = 123; object o = i; // implicit boxing i = 456; // change the contents of i System.Console.WriteLine("The value-type value = {0}", i); System.Console.WriteLine("The object-type value = {0}", o); } } |
输出
The value-type value = 456
The object-type value = 123
C# 语言规范
有关更多信息,请参见 C# 语言规范中的以下各章节:
-
4.3.1 装箱转换