c# - 这个过载是什么意思?

标签 c# equality referenceequals

谁能解释一下这个重载是什么意思?

public static bool operator ==(Shop lhs, Shop rhs)
{
    if (Object.ReferenceEquals(lhs, null))
    {
        if (Object.ReferenceEquals(rhs, null))
        {
            return true;
        }
        return false;
    }

    return lhs.Equals(rhs);
}

我从未见过 Object.ReferenceEquals 重载

最佳答案

此重载旨在比较 Shop 的两个实例。它使用 Object.ReferenceEquals 来确定其中一个实例是否为 null
它不能使用 lhs == nullrhs == null,因为这将再次调用 operator == 并创建无限递归,导致一个 StackOverflowException

如果两个实例都为 null,则返回 true(因为它们相等)。
如果只有一个实例为 null,则返回 false(因为它们不相等)。
如果两个实例都不为 null,则返回 ShopEquals 实现的结果。

关于c# - 这个过载是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34736588/

相关文章:

equality - 证明 Coq 中 Martin-Lof 等式和路径归纳之间的同构

ruby - 为什么 "foo"不是===到/foo/case匹配成功的时候?

c# - 是否有用于 .NET 的通用对象池?

c# - Windows 8 : How to undo & redo ink using built in Inking functionality?

c# - 使 LinkBut​​ton 显示为超链接的样式

c# - 异步不适用于 EF + 工作单元 + Repo

java - 默认 .equals 和 .hashCode 将如何适用于我的类(class)?

c# - 为什么有时 2 个对象引用相同但不总是

java - 重写 .equals() 方法(== 在比较字符串时返回 true)!

c# - 为什么我要在 Equals 覆盖中执行 object.ReferenceEquals(null, this) ?