Equals()IEquatable如何相互关联?

时间:2011-03-25 14:25:36

标签: c# equals

  

可能重复:
  What's the difference between IEquatable and just overriding Object.Equals() ?

我知道C#中的所有类都来自于对象,而对象有一个名为Equals()的虚方法。

我为什么要恭维IEquatable?为什么不覆盖object.Equals

1 个答案:

答案 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一样