假设您有两个不同的类,每个类都有自己的Equals实现;使用哪一个?如果只有一个人有一个怎么办?或者他们都没有?以下任何一行是否相同?
object .Equals( first, second )
first .Equals( second )
second .Equals( first )
我猜测前两个可能是等价的,但我真的没有线索。
它到底是做什么的?
答案 0 :(得分:40)
基本上它做了三件事:
first.Equals(second)
如果两个值都具有良好的等式实现,则排序不应该重要,因为应该实现等式,x.Equals(y)
暗示y.Equals(x)
。但是,我安装的脱机文档确实指出first.Equals(second)(或objA.equals(objB)使用真实参数命名)。 online documentation并没有提到这一点,有趣的是。
为了使所有这些具体化,实现可能如下所示:
public static bool Equals(object x, object y)
{
if (x == y) // Reference equality only; overloaded operators are ignored
{
return true;
}
if (x == null || y == null) // Again, reference checks
{
return false;
}
return x.Equals(y); // Safe as we know x != null.
}
答案 1 :(得分:1)
默认情况下,对象等效性由对象在内存中的地址决定。如果两个实例具有相同的内存地址,则它们是相同的。
但是,这可以在对象中重载,以便开发人员可以比较在同一内存位置中不的两个对象,并且仍然被视为相等。例如,如果您有一个数据访问层,其中每个对象都有来自数据库的数据记录ID,则可以根据ID比较对象相等性。
您可overload operators生成此功能。