C#中重载复合赋值运算符的简单方法?

C#中重载复合赋值运算符的简单方法?,c#,operator-overloading,overloading,C#,Operator Overloading,Overloading,有没有人有一个非常简单的例子来说明如何在C#中重载复合赋值运算符 不能在C#中重载那些运算符。不能显式重载复合赋值运算符。但是,您可以重载主运算符,编译器将其展开 x+=1纯粹是x=x+1的语法糖,后者就是它将被翻译成的东西。如果重载+运算符,将调用它 根据C#规范,+=不在可重载运算符列表中。我假设,这是因为它也是赋值运算符,不允许重载。然而,与其他答案不同,“x+=1”与“x=x+1”不同。C#规范“7.17.2复合赋值”非常明确: ... the operation is evaluat

有没有人有一个非常简单的例子来说明如何在C#中重载复合赋值运算符

不能在C#中重载那些运算符。

不能显式重载复合赋值运算符。但是,您可以重载主运算符,编译器将其展开

x+=1
纯粹是
x=x+1
的语法糖,后者就是它将被翻译成的东西。如果重载
+
运算符,将调用它

根据C#规范,+=不在可重载运算符列表中。我假设,这是因为它也是赋值运算符,不允许重载。然而,与其他答案不同,“x+=1”与“x=x+1”不同。C#规范“7.17.2复合赋值”非常明确:

... the operation is evaluated as x = x op y, except that x is evaluated only once
重要的部分是最后一部分:x只计算一次。所以在这种情况下:

A[B()] = A[B()] + 1; 
如何表达你的陈述会(而且确实)产生影响。但我认为,在大多数情况下,差别可以忽略不计。(即使我只是偶然发现了一个,但事实并非如此。)


因此,问题的答案是:不能重写+=运算符。对于意图可以通过简单的二进制运算符实现的情况,可以覆盖+运算符并设定类似的目标

这是一篇关于C#中重载运算符的好文章:我知道它可以通过这种方式重载,我只想要一个非常简单的代码示例。有人吗?谢谢,这正是我需要的,'x+=1是x=x+1的纯语法糖',这不是完全正确的。看看我的答案。这也解释了x+=1和x=x+1之间的区别:斯蒂芬的帖子表明你可以。当然,您不能从+运算符正交重写它,但是,嘿,从技术上讲,这是可能的。@dss539-当然可以间接重写。我只是回答他的问题。@dss539-这在技术上是可能的吗?如果有什么不同的话,“技术上可能”就是它所没有的。@Tod您可以重载+运算符,从而更改+=运算符的行为。所以是的,这是可能的。
A[B()] = A[B()] + 1;