05
JanUnderstanding Type Casting or Type Conversion in C#
Type casting: An Overview
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. In this C# Tutorial, we will explore more about Typecasting which will include Implicit conversion vs Explicit conversion vs User-defined conversion, different types of type casting or type conversions, and last but not least What the Upcasting and Downcasting. First Let's see the difference between Implicit conversion, Explicit conversion, and User-defined conversion.
Implicit vs Explicit vs User-defined.
Implicit conversion | Explicit Conversion | User-Defined Conversion |
It is also known as automatic conversion, which occurs when the compiler automatically converts one data type into another without requiring any explicit instructions from the programmer. | It is also known as type casting or type conversion, requires the programmer to explicitly specify the conversion from one data type to another | It allows developers to define their own rules for converting between data types that are not natively supported by the language. |
It happens when the destination data type can accommodate all possible values of the source data type without loss of information or precision. | This is done using language-provided conversion functions or syntax. | It is achieved by overloading operators or defining conversion functions within user-defined types. |
Example: Implicit conversion from int to double int intValue = 22; double doubleValue = intValue; | Example: Explicit conversion from double to int double doubleValue = 22.5; int intValue = (int)doubleValue; | Example: Explicit user-defined conversion from MyType to int MyType myObj = new MyType(10); int intValue = (int)myObj; |
Different Types of Type Casting or Type Conversion
Implicit conversion
Implicit conversion is being done automatically by the compiler and no data will be lost. It includes the conversion of a smaller data type to a larger data type and the conversion of derived classes to base class. This is a safe type of conversion. Let's elaborate on this in the real-world example in C# Compiler.
using System; public class Program { public static void Main() { int i = 444; double d1 = i; // Implicit casting from int to double int i1 = 55; // automatic type conversion long l = i1; float f = l; char i2 = '0'; int d2 = i2; Console.WriteLine($"d1 = {d1}"); Console.WriteLine($"l = {l}"); Console.WriteLine($"f = {f}"); Console.WriteLine($"d2 = {d2}"); } }
Output
d1 = 444 l = 55 f = 55 d2 = 48
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 the conversion might not succeed for some reason. This is an unsafe type of conversion.
using System; public class Program { public static void Main() { long l = 2222; int i = (int)l; double d = 143.78; int i1 = (int)d; double d1 = 342.78; float f = (float)d1; decimal dec = (decimal)d1; Console.WriteLine($"i = {i}"); Console.WriteLine($"i1 = {i1}"); Console.WriteLine($"f = {f}"); Console.WriteLine($"dec = {dec}"); } }
Output
i = 2222 i1 = 143 f = 342.78 dec = 342.78
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 conversion 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; } }
Read More - C Sharp Interview Questions
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 classes 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, questions, or comments about this article are always welcome. Also, Consider our C# Programming Course for a better understanding of all C# concepts
FAQs
Take our Csharp skill challenge to evaluate yourself!
In less than 5 minutes, with our skill challenge, you can identify your knowledge gaps and strengths in a given skill.