Please enable Javascript to correctly display the contents on Dot Net Tricks!
 
Become an Expert in C#, .NET, MVC, JAVA, PHP, AngularJS, Hadoop, Android, iphone, Testing etc.
by Joining our Training Programs and Take Your Career to the Next Level! To know more make a call on +91 98 71 749695

Understanding Type Casting or Type Conversion in C#

Posted By : Shailendra Chauhan, 12 Oct 2013
Updated On : 12 Oct 2013
Total Views : 96,003   
 
Keywords : Implicit conversion vs Explicit conversion vs User-defined conversion, different types of type casting or type conversions, What is the Upcasting and Downcasting

Type Casting or Type Conversion is a mechanism to convert one data type value to another one. Type conversion is possible if both the data types are compatible to each other; otherwise you will get an InvalidCastException.

Different Types of Type Casting or Type Conversion

  1. Implicit conversion

    Implicit conversion is being done automatically by the compiler and no data will be lost. It includes conversion of a smaller data type to a larger data types and conversion of derived classes to base class. This is a safe type conversion.

    int smallnum = 654667;
    // Implicit conversion
    long bigNum = smallnum;
    
    class Base
    {
     public int num1 { get; set; }
    }
    class Derived : Base
    {
     public int num2 { get; set; }
    }
    class Program
    {
     static void Main(string[] args)
     {
     Derived d = new Derived();
     //Implicit Conversion
     Base b = d;
     }
    }
    
  2. Explicit conversion

    Explicit conversion is being done by using a cast operator. It includes conversion of larger data type to smaller data type and conversion of base class to derived classes. In this conversion information might be lost or conversion might not be succeed for some reasons. This is an un-safe type conversion.

    long bigNum = 654667;
    // Explicit conversion
    int smallnum = (int)bigNum;
    
    class Base
    {
     public int num1 { get; set; }
    }
    class Derived : Base
    {
     public int num2 { get; set; }
    }
    class Program
    {
     static void Main(string[] args)
     {
     Base b = new Base();
     //Explicit Conversion
     Derived d = (Derived)b; 
     }
    }
    
  3. User-defined conversion

    User-defined conversion is performed by using special methods that you can define to enable explicit and implicit conversions. It includes conversion of class to struct or basic data type and struct to class or basic data type. Also, all conversions methods must be declared as static.

    class RationalNumber
    {
     int numerator;
     int denominator;
     public RationalNumber(int num, int den)
     {
     numerator = num;
     denominator = den;
     }
     public static implicit operator RationalNumber(int i)
     {
     // Rational Number equivalant of an int type has 1 as denominator
     RationalNumber rationalnum = new RationalNumber(i, 1);
     return rationalnum;
     }
     public static explicit operator float(RationalNumber r)
     {
     float result = ((float)r.numerator) / r.denominator;
     return result;
     }
    }
    class Program
    {
     static void Main(string[] args)
     {
     // Implicit Conversion from int to rational number 
     RationalNumber rational1 = 23;
     //Explicit Conversion from rational number to float
     RationalNumber rational2 = new RationalNumber(3, 2);
     float d = (float)rational2;
     }
    }
    

What is the Upcasting and Downcasting?

There are two more casting terms Upcasting and Downcasting. basically these are parts of Implicit conversion and Explicit conversion.

Implicit conversion of derived classes to base class is called Upcasting and Explicit conversion of base class to derived classes is called Downcasting.

class Base
{
 public int num1 { get; set; }
}
class Derived : Base
{
 public int num2 { get; set; }
}
class Program
{
 static void Main(string[] args)
 {
 Derived d1 = new Derived();
 //Upcasting
 Base b1 = d1;
 Base b2 = new Base();
 //Downcasting
 Derived d2 = (Derived)b2; 
 }
}
What do you think?

I hope you will enjoy the tips while programming with C#. I would like to have feedback from my blog readers. Your valuable feedback, question, or comments about this article are always welcome.

 
Further Reading
 
About the Author
Hey! I'm Shailendra Chauhan full-time author, consultant & trainer. I have more than 6 years of hand over Microsoft .NET technologies and other web technologies like JavaScript, AngularJS, NodeJS etc. I am an entrepreneur, the founder & chief editor of www.dotnet-tricks.com and www.dotnettricks.com. I am author of most popular e-books for technical Interview on ASP.NET MVC Interview Questions and Answers & AngularJS Interview Questions and Answers & LINQ Interview Questions and Answers.
I have delivered 100+ training sessions to professional world-wide over Microsoft .NET technologies such C#, ASP.NET MVC, WCF, Entity Framework and other mobile technologies such Ionic, PhoneGap, Corodva. Read more...
 
Free Interview Books
 
SUBSCRIBE & FOLLOW US
 
Browse By Category
 
 
Like us on Facebook