【问题标题】:Overloading +=, +, ==, and != operators [duplicate]重载 +=、+、== 和 != 运算符 [重复]
【发布时间】:2011-08-16 17:30:51
【问题描述】:

可能重复:
Why must we define both == and != in C#?

为什么 += 的重载只能通过 + 的重载才能实现,而 == 和 != 却是分别重载的?
看来应该倒过来了。
+= 重载几乎总是可以写得更有效,因为没有必要为新对象分配内存。但是我无法发明一个示例,其中运算符 == 和 != 除了反转结果 Equals() 之外应该有所不同。

【问题讨论】:

    标签: c# operator-overloading


    【解决方案1】:

    一个类似的问题是asked before

    最大的原因是当您重载==!= 运算符时,您不必返回布尔值。如果您不返回布尔值,则不能仅反转免费运算符。它们分别超载还有其他可能的原因,您可以查看针对其他原因的该问题的答案。

    您不能重载+= 是有正当理由的,因此它是通过+ 运算符隐式完成的。我与您不能覆盖 C# 中的赋值运算符这一事实有关,它是语言标准的一部分。 += 是递增和赋值,后者不能在 C# 中重载。

    【讨论】:

    • +1 想象一下,如果你可以分别超载 ++= 会是多么疯狂......
    • 如果 C# 和 .net 没有对可变结构做坏事(可变结构不是坏事——.net 对它们做的某些事情是),或者如果他们允许类限制坏事混杂地共享对它们的对象的引用,使用单独的 += 和 + 操作符会很有用,因为使用“+”操作符意味着制作副本并保持原件不变,而“+=”意味着可以修改原件.请注意,顺便说一句,事件支持“+=”和“-=”,但不支持“+”和“-”。
    猜你喜欢
    • 1970-01-01
    • 2015-02-23
    • 2014-02-25
    • 2015-06-20
    • 2016-02-03
    • 2011-10-27
    • 2013-03-12
    • 2011-11-12
    • 2012-12-22
    相关资源
    最近更新 更多