繁体   English   中英

C#:静态object.Equals如何检查是否相等?

[英]C#: How does the static object.Equals check for equality?

假设你有两个不同的类,每个类都有自己的Equals实现; 使用哪一个? 如果只有一个人有一个怎么办? 或者他们都没有? 以下任何一行是否相同?

object .Equals( first, second )
first .Equals( second )
second .Equals( first )

我猜测前两个可能是等价的,但我真的不知道。

它到底是做什么的?

基本上它做了三件事:

  • 检查引用相等性(如果是,则返回true)
  • 检查引用是否为null(如果任一值为null,则返回false;现在已经处理了null == null的情况)
  • 检查值是否与first.Equals(second)相等

排序不应该的问题,如果这两个值都乖巧平等的实现,作为平等应该被实现,使得x.Equals(y)意味着y.Equals(x) 但是,我安装的脱机文档确实指出first.Equals(second)(或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比较对象相等性。

您可以重载运算符以生成此功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM