Type conversion takes two forms:
- Implicit conversion
- Explicit conversion
Implicit casting doesn't require a casting operator. This casting is normally used when converting data from smaller integral types to larger or derived types to the base type.
int x = 123; double y = x;
In the above statement, the conversion of data from
double is done implicitly, in other words programmer don't need to specify any type operators.
For example, the values of
ushort and char are effectively interchangeable, because both store a number between 0 and 65535. You can convert values between these types implicitly.
There are many implicit conversions of simple types;
string have no implicit conversions, but the numeric types have a few. For reference, the following table shows the numeric conversions that the compiler can perform implicitly (remember that chars are stored as numbers, so char counts as a numeric type).
|TYPE||CAN SAFELY BE CONVERTED TO|
|byte||short, ushort, int, uint, long, ulong, float, double, decimal|
|sbyte||short, int, long, float, double, decimal|
|short||int, long, float, double, decimal|
|ushort||int, uint, long, ulong, float, double, decimal|
|int||long, float, double, decimal|
|uint||long, ulong, float, double, decimal|
|long||float, double, decimal|
|ulong||float, double, decimal|
|char||ushort, int, uint, long, ulong, float, double, decimal|
Explicit casting requires a casting operator. This casting is normally used when converting a
int or a base type to a derived type.
double y = 123; int x = (int)y;
In the above statement, we have to specify the type operator (
int) when converting from
int else the compiler will throw an error.