繁体   English   中英

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

[英]Simple way to overload compound assignment operator in C#?

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

您不能显式重载复合赋值运算符。 但是,您可以重载主运算符,编译器会对其进行扩展。

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

MSDN运算符重载教程

public static Complex operator +(Complex c1, Complex c2) 
{
   return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary);
}

根据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#中重载这些运算符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM