Conversion Operators

C# will convert (for example) an int to a long implicitly and will allow you to convert a long to an int explicitly. The conversion from int to long is implicit because you know that any int will fit into the memory representation of a long. The reverse operation, from long to int, must be explicit (using a cast) because it is possible to lose information in the conversion:

int myInt = 5;
long myLong;
myLong = myInt;        // implicit
myInt = (int) myLong;  // explicit

You want to be able to convert your Fraction objects to intrinsic types (e.g., int) and back. Given an int, you can support an implicit conversion to a fraction because any whole value is equal to that value over 1 (e.g., 15==15/1).

Given a fraction, you might want to provide an explicit conversion back to an integer, understanding that some value might be lost. Thus, you might convert 9/4 to the integer value 2 (truncating to the nearest whole number).


A more sophisticated Fraction class might not truncate, but rather round to the nearest whole number. This idea is left, as they say, as an exercise for the reader.

You use the keyword implicit when the conversion is guaranteed to succeed and no information will be lost; otherwise you use explicit. Implicit and explicit are actually operators, often called cast or casting operators because their job is to cast from one type to another (e.g., int to Fraction or Fraction to int).

Example 12-3 illustrates how you might implement implicit and explicit ...

Get Learning C# now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.