有人可以通过示例解释我能理解.Equals,IComparable和IComparer之间的区别。
我在接受采访时被问到这个问题。
答案 0 :(得分:8)
首先,从表面上看,Equals
是一种方法(存在于每个对象中),而IComparable
和IComparer
是接口。
Equals
存在于任何类中,可以覆盖以根据类的上下文提供相等性测试(这也是覆盖GetHashCode
的好习惯)。默认情况下,它只测试对象在内存中是否相等,这不是很有用。 Equals
(和GetHashCode
)通常在搜索或散列的上下文中被赋予不同的实现。
实施IComparable
是一种更精细的比较方式,因为它提供了CompareTo
方法,与Equals
相比,这是一种大于/小于比较的方法。只是一个等于或不等的比较。例如,二叉搜索树结构可以从这种方法中受益。
IComparer
与IComparable
类似,但它从外部起作用。它允许您定义一个“中性”对象,用于比较另外两个对象而无需直接修改它们,您需要使用IComparable
。
答案 1 :(得分:0)
Equals
是一种方法,当另外两个是接口时。所以看起来最大的不同。
更严重 - @ChrisSinclair在评论中给了你答案......
如果两个对象相等(或者相同的引用取决于您的实现),则Equals返回true / false IComparable / IComparer:difference between IComparable and IComparer
答案 2 :(得分:0)
.Equals()为您的类提供了一种测试与所有其他可能对象的相等性的方法。这可以被视为对象平等的后备。所以这回答了我相当于作为参数传入的对象的问题。
IComparable提供了一种比较可订购对象的方法,可能的用途包括排序。实现此接口会将排序逻辑放入您的类中。
IComparer与IComparable几乎完全相同,只是逻辑包含在单独的类中。