假设你有两个不同的类,每个都有自己的执行的Equals; 哪一个是使用? 如果只有其中一人有什么呢? 或者他们没有? 是否有任何以下行的相同呢?
object .Equals( first, second )
first .Equals( second )
second .Equals( first )
我猜,前两个可能是等价的,但我真的没有线索。
这是什么真的?
假设你有两个不同的类,每个都有自己的执行的Equals; 哪一个是使用? 如果只有其中一人有什么呢? 或者他们没有? 是否有任何以下行的相同呢?
object .Equals( first, second )
first .Equals( second )
second .Equals( first )
我猜,前两个可能是等价的,但我真的没有线索。
这是什么真的?
基本上,它做了三两件事:
first.Equals(second)
排序不应该的问题,如果这两个值都乖巧平等的实现,作为平等应该被实现,使得x.Equals(y)
意味着y.Equals(x)
不过,我已经安装了离线文档中则状态first.Equals(二)(或objA.equals(objB)使用真正的参数命名)中规定。 该在线文档并没有提到这一点,有趣的是。
只是为了让这一切混凝土,实施看起来是这样的:
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.
}
默认情况下,物体等效性通过在内存中的对象的地址确定。 如果这两种情况下具有相同的内存地址,他们是平等的。
然而,这可以在对象内被重载以使得开发者可以比较arn't在相同的存储器位置,并且仍然被认为是相等的两个对象。 举例来说,如果你有一个数据访问层,每个对象从数据库具有数据记录的ID,你可以有基于ID对象相等比较。
你可以重载运算符来产生这种功能。