CHAPTER 8 WORKING WITH INTERFACES
The System.Array class defines a static method named Sort(). When you invoke this method on an
array of intrinsic types (int, short, string, etc.), you are able to sort the items in the array in
numeric/alphabetic order, as these intrinsic data types implement IComparable. However, what if you
were to send an array of Car types into the Sort() method as follows?
// Sort my cars? Not yet!
Array.Sort(myAutos);
If you run this test, you would get a runtime exception, as the Car class does not support the
necessary interface. When you build custom types, you can implement IComparable to allow arrays of
your types to be sorted. When you flesh out the details of CompareTo(), it will be up to you to decide what
the baseline of the ordering operation will be. For the Car type, the internal CarID seems to be the logical
candidate:
// The iteration of the Car can be ordered
// based on the CarID.
public class Car : IComparable
{
...
// IComparable implementation.
int IComparable.CompareTo(object obj)
{
Car temp = obj as Car;
if (temp != null)
{
if (this.CarID > temp.CarID)
return 1;
if (this.CarID < temp.CarID)
return -1;
else
return 0;
}
else
throw new ArgumentException("Parameter is not a Car!");
}
}
As you can see, the logic behind CompareTo() is to test the incoming object against the current
instance based on a specific point of data. The return value of CompareTo() is used to discover whether
this type is less than, greater than, or equal to the object it is being compared with (see Table 8-1).
Table 8-1. CompareTo() Return Values
314
CompareTo() Return Value
Description
Any number less than zero
This instance comes before the specified object in the sort
order.
Zero
This instance is equal to the specified object.
Any number greater than zero
This instance comes after the specified object in the sort order.