可能重复:
What's the difference between IEquatable and just overriding Object.Equals() ?
我知道C#中的所有类都来自于对象,而对象有一个名为Equals()
的虚方法。
我为什么要恭维IEquatable
?为什么不覆盖object.Equals
?
答案 0 :(得分:3)
IEquatable<T>
定义
bool Equals(T other)
虽然对象的等于定义
bool Equals(object other)
因此,为您的类定义IEquatable可以让您更轻松地比较同一个类的两个项,而无需转换为当前类型。很多时候你会看到人们实现IEquatable,然后覆盖对象的Equals来调用IEquatable的等于:
public class SomeClass : IEquatable<SomeClass>
{
public bool Equals(SomeClass other)
{
// actual compare
}
public override bool Equals(object other)
{
// cross-call to IEquatable's equals.
return Equals(other as SomeClass);
}
}
此外,您还可以定义其他类型之间的相等性。就像make Fraction实现IEquatable一样