【发布时间】:2011-08-16 17:30:51
【问题描述】:
为什么 += 的重载只能通过 + 的重载才能实现,而 == 和 != 却是分别重载的?
看来应该倒过来了。
+= 重载几乎总是可以写得更有效,因为没有必要为新对象分配内存。但是我无法发明一个示例,其中运算符 == 和 != 除了反转结果 Equals() 之外应该有所不同。
【问题讨论】:
为什么 += 的重载只能通过 + 的重载才能实现,而 == 和 != 却是分别重载的?
看来应该倒过来了。
+= 重载几乎总是可以写得更有效,因为没有必要为新对象分配内存。但是我无法发明一个示例,其中运算符 == 和 != 除了反转结果 Equals() 之外应该有所不同。
【问题讨论】:
一个类似的问题是asked before。
最大的原因是当您重载== 和!= 运算符时,您不必返回布尔值。如果您不返回布尔值,则不能仅反转免费运算符。它们分别超载还有其他可能的原因,您可以查看针对其他原因的该问题的答案。
您不能重载+= 是有正当理由的,因此它是通过+ 运算符隐式完成的。我与您不能覆盖 C# 中的赋值运算符这一事实有关,它是语言标准的一部分。 += 是递增和赋值,后者不能在 C# 中重载。
【讨论】:
+ 和 += 会是多么疯狂......