Like Java, casting in C# can be implicit as well as explicit. Widening casts  can be performed implicitly, while narrowing casts have to be stated explicitly.
 A widening cast is a cast from a simple type of lower range to one of higher range. Examples include casting a short to an int, an int to a long, a float to a double. A narrowing cast is the opposite. Casting a long to an int is a narrowing cast.
Figure 9.4 shows the allowed implicit casts in C#. Unlike Java, which has only eight primitive types, the C# picture is more complex with four more types.
Figure 9.4 is very useful in determining whether ...