Type conversion is a processof convetring one type of data to another. There are three ways of doing it, namely implicit explicit and user defined.

  • Implicit : If one type of data is automatically converted into another type of data, it is known as implicit conversions. There is no loss of data resulted from implicit conversion.

  • Explicit : when you force the data to convert from one form to other.But explicit conversion is a forced conversion and there may be a data loss.

  • User defined:

 

Implicit Conversions in C# 

The implicit conversions can occur in a variety of situations like function invoking, cast expressions, assignments etc. The implicit conversions can be further classified into different categories. 

Implicit Numerical Conversions 

The possible implicit numerical conversions in C# are shown below. 
long x;
int y = 25;
x = y; //implicit numerical conversion
 

An implicit enumeration conversion permits the decimal integer literal 0 to be converted to any enum type. 

Implicit Reference Conversion 

The possible implicit reference conversions are

  1. From any reference type to object.
  2. From any class type D to any class type B, provided D is inherited from B.
  3. From any class type A to interface type I, provided A implements I.
  4. From any interface type I2 to any other interface type I1, provided I2 inherits I1.
  5. From any array type to System.Array.
  6. From any array type A with element type a  to an array type B with element type b provided A & B differ only in element type (but the same number of elements) and both a and b are reference types and an implicit reference conversion exists between a & b.
  7. From any delegate type to System.Delegate type.
  8. From any array type or delegate type to System.ICloneable
  9. From null type to any reference type.

Boxing Conversions

Boxing is the conversion of any value type to object type. Remember that boxing is an implicit conversion. Boxing a value of value type like int consists of allocating an object instance and copying the value of the value type into that object instance. An example for boxing is shown below. 


int x = 10;
object o = x; //Boxing
if(o is int)
Console.WriteLine(“o contains int type”);
 

A boxing conversion making a copy of the value being boxed. But when we convert a reference type to object type, the object continues to reference the same instance.