黑马程序员技术交流社区

标题: IComparable和IComparer接口 [打印本页]

作者: qsq0000hm    时间: 2014-8-1 10:59
标题: IComparable和IComparer接口
本帖最后由 qsq0000hm 于 2014-8-1 13:48 编辑

这两个接口搞晕了。

public interface IComparable
    {
        int CompareTo(object obj);
    }
public interface IComparer
    {      
        int Compare(object x, object y);
    }
Sort()方法,如果没有参数,则类型必须实现了IComparable接口才能Sort排序。 也可以传入一个实现了 IComparer接口的类型,也就是所谓的比较器了。但是这两个接口里面的方法分别是怎么就实现排序的,搞的有点晕呼呼的,为什么不合成一个接口,既可以类实现这个接口,也可以传一个实现这个接口的类型
作者: 许庭洲    时间: 2014-8-1 11:08
1.IComparable 接口向对象的用户宣布该对象可以将自身与同一类型的其他对象进行比较,而接口的用户不需要知道相关的实现方式。
2. ICompararer用于实现一个专门的“比较器”,这个比较器可以对传入的两个对象比较大小。
作者: qsq0000hm    时间: 2014-8-1 11:33
许庭洲 发表于 2014-8-1 11:08
1.IComparable 接口向对象的用户宣布该对象可以将自身与同一类型的其他对象进行比较,而接口的用户不需要知 ...

可不可以这么理解,类实现IComparable接口,就是显式的告诉别人这个类的对象是可以被比较的,具体比什么,怎么比,就是看怎么实现这个接口的方法了,体现多态。
然后,实现IComparer接口的类,就是用来写比较器的,我们不管这个要比较的类的对象是否可以进行比较,直接通过sort方法传入比较器,调用这个比较器,将类的对象放入这个比较器进行比较,具体怎么比,比什么,也是看怎么实现IComparer接口的方法了。
作者: 许庭洲    时间: 2014-8-1 13:06
qsq0000hm 发表于 2014-8-1 11:33
可不可以这么理解,类实现IComparable接口,就是显式的告诉别人这个类的对象是可以被比较的,具体比什么 ...

嗯嗯,说的太对了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2