Rick Said..
Microsoft .NET supports value types for performance reasons, but everything in .NET is ultimately an object. Value types are allocated on the stack by default, but they can always be converted into a heap-based reference-type object, called boxing.
So converting value type to reference type is boxing.
The following code snippet shows that we can create a box and copy the value of i into it:
int i = 1; // i - a value type
object box = i; // box - a reference object
When you box a value, you get an object upon which you can invoke methods, properties, and events. For example, once you have converted the integer into an object, as shown in this code snippet, you can call methods that are defined in System.Object, including ToString( ), Equals( ), and so forth.
The reverse of boxing is of course unboxing, which means that you can convert a heap-based reference-type object into its value-type equivalent, as shown here:
int j = (int)box;
This example simply uses the cast operator to cast a heap-based object called box into a value-type integer.