Boxing and Unboxing in C#

We know that C# data types are divided into two types, value type and reference type

  1. Value types, which are allocated on the stack and
  2. Reference types, which are allocated on the heap

How does this square with the ability to call methods on an int, which is a value on the stack?

The way C# achieves this is through a bit of magic called boxing. Boxing and its counterpart unboxing, allow us to convert value types to reference types and then back to value types.

Boxing is the term used to describe the transformation of a value type to a reference type. Basically, the run-time creates a temporary reference-type box for the object on the heap.

This conversion can occur implicitly, but we can also perform it manually:

int x = 20;
object obj = x;

Unboxing is the term used to describe the reverse process, where the value of a previously boxed value type is cast back to a value type. We use the term cast here, as this has to be done explicitly. The syntax is similar to explicit type conversions

int x = 100;
object obj = x; // Box the int
int y = (int)obj; // Unbox it back into an int

We can only unbox a variable that has previously been boxed (Implicitly or explicitly).

Warning. When unboxing, we have to be careful that the receiving value variable has enough room to store all the bytes in the value being unboxed. C#’s ints, for example, are only 32 bits long, so unboxing a long value (64 bits) into an int as shown below will result in an InvalidCastException:

long x = 333333423000;
object p = (object)x;
int y = (int)p;
Ali Adravi Having 13+ years of experience in Microsoft Technologies (C#, ASP.Net, MVC and SQL Server). Worked with Metaoption LLC, for more than 9 years and still with the same company. Always ready to learn new technologies and tricks.
  • c#
  • oops
By Ali Adravi On 27 Dec, 12  Viewed: 1,173

Other blogs you may like

Polymorphism in C# with example

Polymorphism is derived from two Latin words, 1. Poly means many 2. Marphose means forms. By using inheritance, a class can be used as many types, say we have a Person which may be a Professor, may be a Student, may be Clerk. So in this article we will see some example of Polymorphism. When we... By Hamden   On 01 Jun 2013  Viewed: 4,564

How to create windows service in C# visual studio 2010

Creating windows service in C# is really easy but when we need to create first time we face many problems so in this post we will try to learn everything about window service. In this article we will create a windows service which will run after a particular interval, and time should be... By Ali Adravi   On 30 Apr 2013  Viewed: 8,641

Covariance and Contravariance in C# 4.0 with example

C# the language, right from the very beginning is always supported covariance and contravariance but in most simple scenario, now in C# 4.0 we have full support of covariance and contravariance in all circumstances, generic interface and generic delegates, other C# types already support from first... By Ali Adravi   On 29 Mar 2013  Viewed: 4,988

default value for different data type in C#

In C# there are different data type and they use some default value when we declare a variable. When we define a variable of type int or Int32 say int score; so what is the value of score, will it be null or zero, in the same way if we create a variable of type string/String what value it holds... By Ali Adravi   On 27 Mar 2013  Viewed: 2,615

enum in C# and conversion

An enumeration type (also known an enumeration or an enum) provides an efficient way to define a set of named integral constants that may be assigned to a variable to make programming clear, understandable and manageable. There are ways of using, like how to use enum in switch and case statement,... By Hamden   On 27 Mar 2013  Viewed: 4,571