问题简述:书中说数组排序可以使用 Array.Sort 方法。但是如果你自己写了一个类 Myclass ,然后实例化一个 Myclass 类型的数组,就没有办法使用 sort 方法排序,因为 Array 类的 Sort 方法其实依赖千一个叫作 IComparable 的接口,它声明在 BCL 中,包含唯一的方法 CompareTo 。IComparable 接口的声明。注意,接口主体内包含 CompareTo 方法的声明,指定了它接受一个 object 类型的参数。尽管该方法具有名称、参数和返回类型,却没有实现。尽管在接口声明中没有为 CompareTo 方法提供实现,但 IComparable 接口的 NET 文档中描述 了该方法应该做的事情,你可以在创建实现该接口的类或结构时参考。文档中写道,在调用 CompareTo 方法时,它应该返回以下几个值之一:
1 、负数值如果当前对象小于参数对象;
2 、正数值如果当前对象大于参数对象;
3 、零如果两个对象在比较时相等。
Sort 使用的算法依赖于使用元素的 CompareTo 方法来决定两个元素的次序。int 类型实现了 IComparable, 但是 MyClass 没有,因此当 Sort 尝试调用 MyClass 不存在的 CompareTo 方法时会抛出异常。
---------太好了,只要我的 Myclass 继承了 IComparable 接口。就可以愉快的使用 sort 方法了吧?可是看到下面代码的时候我就沉默了。你看第三行,它怎么自己实现了 CompareTo 方法。难道我继承了 IComparable 接口不就是不想重复造轮子么?如果我自己重写 CompareTo ,那还不如不继承接口,自己直接手写 sort 方法不就完了? 难道 BCL 中就没有自己的 CompareTo ?如果没有自带的 CompareTo ,那么当你对标准数组排序调用 sort 方法时,sort 调用的是谁的 CompareTo 方法呢?
