.Equals,IComparable和IComparer之间的区别

时间:2012-06-25 16:12:25

标签: c# .net

有人可以通过示例解释我能理解.Equals,IComparable和IComparer之间的区别。

我在接受采访时被问到这个问题。

3 个答案:

答案 0 :(得分:8)

首先,从表面上看,Equals是一种方法(存在于每个对象中),而IComparableIComparer是接口。

Equals存在于任何类中,可以覆盖以根据类的上下文提供相等性测试(这也是覆盖GetHashCode的好习惯)。默认情况下,它只测试对象在内存中是否相等,这不是很有用。 Equals(和GetHashCode)通常在搜索或散列的上下文中被赋予不同的实现。

实施IComparable是一种更精细的比较方式,因为它提供了CompareTo方法,与Equals相比,这是一种大于/小于比较的方法。只是一个等于或不等的比较。例如,二叉搜索树结构可以从这种方法中受益。

IComparerIComparable类似,但它从外部起作用。它允许您定义一个“中性”对象,用于比较另外两个对象而无需直接修改它们,您需要使用IComparable

答案 1 :(得分:0)

Equals是一种方法,当另外两个是接口时。所以看起来最大的不同。

更严重 - @ChrisSinclair在评论中给了你答案......

如果两个对象相等(或者相同的引用取决于您的实现),则Equals返回true / false IComparable / IComparer:difference between IComparable and IComparer

答案 2 :(得分:0)

.Equals()为您的类提供了一种测试与所有其他可能对象的相等性的方法。这可以被视为对象平等的后备。所以这回答了我相当于作为参数传入的对象的问题。

IComparable提供了一种比较可订购对象的方法,可能的用途包括排序。实现此接口会将排序逻辑放入您的类中。

IComparer与IComparable几乎完全相同,只是逻辑包含在单独的类中。