有没有人有一个非常简单的例子,说明如何在C#中重载复合赋值运算符?
答案 0 :(得分:12)
您无法显式重载复合赋值运算符。但是,您可以重载主运算符,编译器会对其进行扩展。
x += 1
纯粹是x = x + 1
的语法糖,后者是它将被翻译成的语法。如果你重载+
运算符,它将被调用。
MSDN Operator Overloading Tutorial
public static Complex operator +(Complex c1, Complex c2)
{
return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary);
}
答案 1 :(得分:4)
根据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;
它可以(并确实)有所作为,如何制定你的陈述。但我认为,在大多数情况下,差异可以忽略不计。 (即使我刚遇到一个,但事实并非如此。)
因此问题的答案是:不能覆盖+ =运算符。对于通过简单的二元运算符实现意图的情况,可以覆盖+运算符并实现类似的目标。
答案 2 :(得分:2)
您不能在C#中重载这些运算符。