重载运算符==后,如何比较两个变量是否指向同一个对象?

时间:2009-03-06 05:35:29

标签: c# operators operator-overloading equals-operator

重载比较运算符,如何比较两个变量是否指向同一个对象(即非值)

public static bool operator ==(Landscape a, Landscape b)
{
    return a.Width == b.Width && a.Height == b.Height;
}

public static bool operator !=(Landscape a, Landscape b)
{
    return !(a.Width == b.Width && a.Height == b.Height);
}

4 个答案:

答案 0 :(得分:8)

使用Object.ReferenceEquals静态方法。

当然,为了使==和!=方法保留其全部功能,您还应该重写Equals和GetHashCode,以便它们向调用者返回一致的响应集。

答案 1 :(得分:4)

答案 2 :(得分:4)

检查两者是否指向同一个对象。您应该使用Object.ReferenceEquals方法。如果两者相同或两者都为null,则返回true。否则它将返回false

答案 3 :(得分:0)

我知道这是一个老问题,但是如果你要重载==或Object.Equals方法,你也应该重载反向运算符!=。

在这种情况下,由于您要比较内部数字,您应该重载其他比较运算符<,>,< =,> =。

将来使用您的课程的人,无论是第三方消费者,还是接管您的代码的开发人员,都可能使用类似CodeRush或Refactor的东西,这会自动“翻转”逻辑(也称为逆转有条件的,然后压扁它,以打破25嵌套的if综合症。如果他们的代码执行了这一操作,并且您重载了==运算符而没有重载!=运算符,则可能会改变代码的预期含义。