'+='的含义是什么?

4

我对C#的语法感到困惑:"+="有什么用途?


请学习标签字段的含义。 - SLaks
2
请学会正确拼写和使用语法。 - Heather
8
嗨,这个网站可能比你平常使用的论坛要求更加严格,但是付出的努力去提出有效的问题是值得的。如果您用完整的英语输入,提供问题的具体背景和实例,您可以从这里获得更多帮助。 - Extrakun
再编辑一次,这个问题就会少于5个单词(它可以用不到5个单词来表达):D - Extrakun
4个回答

30

+=语法可以有多种用法:

SomeEvent += EventHandler;

添加事件处理程序。


SomeVariable += 3;

等同于

SomeVariable = SomeVariable + 3;

1
好的回答。尽管我知道得更清楚,但我可能会忘记这个运算符的事件处理程序方面。 - Beska
事件处理程序方面与其他方面几乎完全相同;所有发生的事情就是事件/委托对象覆盖了+运算符。a += b只是对a = a + b的语法糖。请参见http://msdn.microsoft.com/en-us/library/8edha89s.aspx,其中指出“赋值运算符不能重载,但+=例如,使用可以被重载的+进行评估。” - technophile
4
@Technophile:错误。在类外面(或者总是在C# 4.0中),instance.Event += handler 编译为 instance.add_Event(handler); - SLaks
@SLaks 谢谢您的澄清。它们在概念上是相同的,我只是记错了实现方式。 - technophile
1
@Technophile:它们并不完全在概念上相同。实际上,这是一个(微妙的)破坏性变化:http://blogs.msdn.com/cburrows/archive/2010/03/18/events-get-a-little-overhaul-in-c-4-part-iii-breaking-changes.aspx - SLaks
在事件中,它调用与事件相关联的 add 方法。然而,在委托字段上,它会分解为 SomeDelegate = SomeDelegate + AnotherDelegate,并将调用列表简单连接起来。 - Ben Voigt

6
这被称为复合运算符,它们在我所知道的所有语言中都很常见:Javascript、C、Java、PHP、.net、GL。
正如大家所说,是value = value + 3的缩写形式。
使用它有多种原因。最明显的是它更快速地编写,更易于阅读,并且更容易发现错误。
最重要的是,复合运算符专门设计成不需要与等效的value = value + 3一样多的计算量。我不完全确定原因,但证据是显而易见的。
只需创建一个循环,循环5,000,000次并在进行过程中添加值。在两个测试用例中,我从Actionscript中了解到,使用复合运算符可以提高约60%的速度。
你还有等价的: +=:加法 -=:减法 /=:乘法 *=:乘法 %=:取模
以及不太明显的: ++:加一 --:减一

1
复合赋值运算符的完整列表如下:`x += y x -= y x *= y x /= y x %= y x &= y x |= y x ^= y x <<= y x >>= y`摘自MSDN: C# Operators - Jeppe Stig Nielsen

5
a += 3

是相同的意思

a = a + 3

0
请注意,它并不总是等价的。
对于普通变量来说,a+=a 确实等价于 a=a+a,而且更短!但对于那些改变状态的奇怪变量来说,情况就不一样了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接