Boxing Conversion (C# Programming Guide)
Boxing is used to store value types in the garbage-collected heap. Boxing is an implicit conversion of a Value Types (C# Reference) to the type object or to any interface type implemented by this value type. Boxing a value type allocates an object instance on the heap and copies the value into the new object.
Consider the following declaration of a value-type variable:
int i = 123;
The following statement implicitly applies the boxing operation on the variable i
:
object o = i; // implicit boxing
The result of this statement is creating an object reference o
, on the stack, that references a value of the type int, on the heap. This value is a copy of the value-type value assigned to the variable i
. The difference between the two variables, i
and o
, is illustrated in the following figure.
Boxing Conversion
It also possible to perform the boxing explicitly as in the following example, but explicit boxing is never required:
int i = 123;
object o = (object) i; // explicit boxing
Example
This example converts an integer variable i
to an object o
by means of boxing. Then, the value stored in the variable i
is changed from 123
to 456
. The example shows that the original value type and the boxed object use separate memory locations, and therefore can store different values.
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);
}
}
Output
The value-type value = 456
The object-type value = 123
C# Language Specification
For more information, see the following sections in the C# Language Specification:
- 4.3.1 Boxing Conversions
See Also
Concepts
C# Programming Guide
Boxing and Unboxing (C# Programming Guide)
Unboxing Conversion (C# Programming Guide)
Boxed Value Types