这个重载是什么意思?

Mad*_*ess 19 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);
}
Run Code Online (Sandbox Code Playgroud)

我从未在重载中看到过Object.ReferenceEquals

Ren*_*ogt 37

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

如果两个实例都null返回true(因为它们相等).
如果只有一个实例,null则返回false(因为它们不相等).
如果这两种情况都没有null它返回的结果Equals的执行Shop.

  • 你也可以调用`(object)lhs == null`和`(object)rhs == null`来获得相同的效果 (4认同)