none
IComparable接口与ICompaer之间的差别??? RRS feed

  • 问题

  • 如题???

    主要说说两个接口下的方法CompareTo()与Compare()方法之间的差别???

    请高手帮忙讲讲,谢谢!!!


    飞翔!
    2010年3月25日 9:52

答案

  • 看需要咯,需要哪个就实现哪个。

    IComparable ,自己跟自己比较,例如放进列表里进行sort的时候需要用到。

    IComparer则是一种比较的提供器,对其他两个对象进行比较。如果放进列表里的对象自己没有 IComparable 接口,则可以外部提供一个 IComparer 对它进行sort。


    霸王
    2010年3月25日 10:01
  • 这两个东西其实很多人也没有搞得清楚。

    IComparable<T> 是基本的 BCL 类型,它用来实现 CompareTo 方法,CompareTo 可以比较两个对象的实例,如相等,则返回 0,否则返回 -1 (前者比后者小) 或 1 (前者比后者大)。

    IComparer<T> 用来实现 Comparer<T> 类型及其子类型,它用来完成某些包含比较操作,如 List<T> 上的 Sort 方法。而一些实用类,如 StringComparer 也会实现此接口。

    另外,IComparable<T> 还用来支持运算符重载,如 ==, >, >=, <, <=, 或者 !=。


    Mark Zhou
    2010年3月25日 11:29
  • 你好!

         你可以这样来理解他们:

         IComparable用来提供两个对象的通常意义上的比较方式

         IComparaer用来提供一些其他的比较方式(即非通常意义下的比较方式!

         比如,通常比较两个包子的时候都是通过大小,这个通过实现IComparable接口来实现

         当然,有人是喜欢通过味道来比较两个包子的,这个通过实现IComparaer接口来实现


    周雪峰
    2010年4月23日 12:15
    版主

全部回复

  • 看需要咯,需要哪个就实现哪个。

    IComparable ,自己跟自己比较,例如放进列表里进行sort的时候需要用到。

    IComparer则是一种比较的提供器,对其他两个对象进行比较。如果放进列表里的对象自己没有 IComparable 接口,则可以外部提供一个 IComparer 对它进行sort。


    霸王
    2010年3月25日 10:01
  • 这两个东西其实很多人也没有搞得清楚。

    IComparable<T> 是基本的 BCL 类型,它用来实现 CompareTo 方法,CompareTo 可以比较两个对象的实例,如相等,则返回 0,否则返回 -1 (前者比后者小) 或 1 (前者比后者大)。

    IComparer<T> 用来实现 Comparer<T> 类型及其子类型,它用来完成某些包含比较操作,如 List<T> 上的 Sort 方法。而一些实用类,如 StringComparer 也会实现此接口。

    另外,IComparable<T> 还用来支持运算符重载,如 ==, >, >=, <, <=, 或者 !=。


    Mark Zhou
    2010年3月25日 11:29
  • 谢谢了,虽然不怎么懂,不过慢慢来吧!!!

    谢谢!


    实在不想做一件事时,记得要想一想不做的后果!
    2010年4月5日 3:28
  • 你好!

         你可以这样来理解他们:

         IComparable用来提供两个对象的通常意义上的比较方式

         IComparaer用来提供一些其他的比较方式(即非通常意义下的比较方式!

         比如,通常比较两个包子的时候都是通过大小,这个通过实现IComparable接口来实现

         当然,有人是喜欢通过味道来比较两个包子的,这个通过实现IComparaer接口来实现


    周雪峰
    2010年4月23日 12:15
    版主
  • 你好!

         你可以这样来理解他们:

         IComparable用来提供两个对象的通常意义上的比较方式

         IComparaer用来提供一些其他的比较方式(即非通常意义下的比较方式!

         比如,通常比较两个包子的时候都是通过大小,这个通过实现IComparable接口来实现

         当然,有人是喜欢通过味道来比较两个包子的,这个通过实现IComparaer接口来实现


    周雪峰

    好比喻!
    2010年4月23日 14:39
  • 实现IComparable,使实现类的对象具有可比较的能力,即看成是默认的比较方式;

    实现IComparer,使实现的类成为一个对象比较器,不同的对象需要实现不同的比较器。

    例如,需要对一个Employee类的对象进行排序,默认是按name排序,但是有时需要按age或address等信息进行排序的话,

    就可以让Employee类实现IComparable,并分别通过实现IComparer实现另外两个比较器:

    public class Employee : IComparable

    {

    public int CompareTo(object obj){ return 0; }

    protected class AgeComparer : IComparer{ public int Compare(object obj1, object obj2){ return 0;} }

    protected class AddressComparer : IComparer{ public int Compare(object obj1, object 2){ return 0;}}

    }

    2014年1月13日 7:30