重载operator ==以检查两个对象的相等性

时间:2011-03-01 08:17:05

标签: .net operator-overloading

昨天我问过使用重载运算符而没有人提到它很常见,经常用来检查字符串,颜色等两个对象的公平性。

同样在这种情况下,如果我的类型代表了一些可以检查其字段等值的对象,那么重载==是正确的。当然,我并不是要检查变量是否指向同一个对象。

4 个答案:

答案 0 :(得分:2)

是的,当然重载==运算符(和!=)是合理的。

你需要知道它重载而不是覆盖,所以如果你曾经有过:

object first = ...;
object second = ...;

if (first == second)

将检查引用的相等性,无论你做了什么。

答案 1 :(得分:1)

你基本上可以自己决定股权的含义。如果某些字段是相同的,那么请确保检查。

答案 2 :(得分:1)

在我看来,最好使用==来检查引用相等性,并使用.Equals(Object obj)来实现自定义相等。

通过这种方式,您将有两种比较方式,而不是一种。

无论如何请记住,如果重新定义Equality,则应重新定义GetHashCode(),以便两个相等的对象返回相同的哈希码。

答案 3 :(得分:0)

不太确定你的问题是什么,因为你似乎已经自己回答了问题。 您可以重载operator == etc来检查两个对象是否相同,因此在您的字符串或颜色示例中,两个字符串具有相同的实际内容,或者两个颜色具有相同的RGB值。正如您所说,这与指向同一对象的两个变量不同。 您可能需要查看MSDN部分

Operator Overloading Tutorial

有关重载的更多信息。

包含更多信息的类似问题,包括您可以重载的运算符列表: why C# not allow operator overloading?