IComparable接口要实现CompareTo方法,并且一定要通过值可以排序的类型来实现,例如基本数值类型(整型等),或者字符串,看下面的代码可能易懂一点:
public class Temperature : IComparable
{
protected double temperatureF;
public int CompareTo(object obj) {
if(obj is Temperature)
{
Temperature otherTemperature = (Temperature) obj;
return this.temperatureF.CompareTo(otherTemperature.temperatureF);
}
else
{
throw new ArgumentException("object is not a Temperature");
}
}
}
这里通过比较double类型的变量来确定Temperature类对象的大小。
IComparer接口其实是特定用于Array的Sort和BinarySearch方法,通过实现IComparer接口的Compare方法以确定Sort如何进行对对象进行排序。
实现IEnumerable 的类表示其支持迭代其内部对象,也就是在.net中foreach循环,IEnumerable接口只有一个方法GetEnumerator(),其返回一个实现IEnumerator接口的类对象,
IEnumerator有两个方法MoveNext()、Reset()和一个属性Current用于迭代IEnumerator对象中对象集合。
其实把IComparable和Icomparer,IEnumerable和IEnumerator分开为两个接口来定义,是遵从面向对象的思维定向,表示IComparable对象可以比较,IEnumerable对象可以迭代,Icomparer,负责对对象进行比较,IEnumerator负责对对象进行迭代,各司其职罢了。