2011-03-25 60 views
0

可能重复:
What's the difference between IEquatable and just overriding Object.Equals() ?Equals()IEquatable它们是如何相互关联的?

我知道,在C#中的所有类是从对象和对象deived有一个名为Equals()虚方法。

为什么我应该侮辱IEquatable?为什么不重写object.Equals

+2

相同[有什么区别IEquatable和刚刚覆盖Object.Equals()?](http://stackoverflow.com/questions/2734914/whats-the-difference-between-iequatable-and - 只是-首要对象-等于)。 – 2011-03-25 14:28:27

回答

3

IEquatable<T>定义

bool Equals(T other) 

虽然对象的equals定义

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 make分数工具IEquatable

+0

@Andrew:哈,另一只野兔?不知道我们是否与我们祖先的任何地方有关... – 2011-03-25 15:42:21

+0

非常酷!我的中间名是迈克尔 - 小世界:) – 2011-03-27 00:14:36

+0

@Andrew:非常好! – 2011-05-11 21:45:31

相关问题