2011-08-16 63 views
6

可能重复:
Why must we define both == and != in C#?重载+ =,+,==和=操作

为什么只有+超载超载+ =可能的,但==和!=分开重载?
它似乎应该倒置。
+ =重载几乎总是可以写得更有效,因为没有必要为新对象分配内存。但是我不能发明一个例子,其中运算符==和!=应该在除了反转结果Equals()之外有所不同。

回答

7

类似的问题asked before

最大的原因是,当您将==!=运算符重载时,您不必返回布尔值。如果你没有返回一个布尔值,那么你不能只颠倒免费的操作符。还有其他可能的原因,他们分别超载,您可以查看该问题的答案出于其他原因。

有一个有效的原因,你不能重载+=,因此它通过+运算符隐式完成。我必须处理的是,您不能在C#中重写赋值运算符,这是语言标准的一部分。 +=是增量和赋值,后者在C#中不能重载。

+4

+1想象一下如果你可以单独重载'+'和'+ =',疯狂...... –

+0

如果C#和.net没有做可变结构的恶事(可变结构不是邪恶的 - 有些或者如果他们允许类限制对他们对象的引用的恶意混杂共享,那么使用单独的+ =和+运算符将会很有用,因为使用“+”运算符意味着要创建一个复制并保留原始文本,而“+ =”意味着可以修改原文。请注意,顺便说一句,事件支持“+ =”和“ - =”,但不支持“+”和“ - ”。 – supercat