C# provides flexibility to convert value type into reference type and vice verse by boxing and unboxing operations.
When value type is converted into reference type it is called as boxing. It is done implicitly.
When parameters are passed inside any method and it need the reference type, the compiler automatically converts it.
Opposite to boxing when the reference type is converted to value type it is called as unboxing. It is not done implicitly. We have to do it explicitly.
int i = 20;
o = i;//Boxing
int j = (int)o;//Unboxing using type casting