可能重复:
What's the difference between IEquatable and just overriding Object.Equals() ?Equals()IEquatable它们是如何相互关联的?
我知道,在C#中的所有类是从对象和对象deived有一个名为Equals()
虚方法。
为什么我应该侮辱IEquatable
?为什么不重写object.Equals
?
可能重复:
What's the difference between IEquatable and just overriding Object.Equals() ?Equals()IEquatable它们是如何相互关联的?
我知道,在C#中的所有类是从对象和对象deived有一个名为Equals()
虚方法。
为什么我应该侮辱IEquatable
?为什么不重写object.Equals
?
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
@Andrew:哈,另一只野兔?不知道我们是否与我们祖先的任何地方有关... – 2011-03-25 15:42:21
非常酷!我的中间名是迈克尔 - 小世界:) – 2011-03-27 00:14:36
@Andrew:非常好! – 2011-05-11 21:45:31
相同[有什么区别IEquatable和刚刚覆盖Object.Equals()?](http://stackoverflow.com/questions/2734914/whats-the-difference-between-iequatable-and - 只是-首要对象-等于)。 – 2011-03-25 14:28:27