Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#为什么分配事件处理程序使用+;=操作员和非操作员=_C#_Events_Delegates_Compound Assignment - Fatal编程技术网

C#为什么分配事件处理程序使用+;=操作员和非操作员=

C#为什么分配事件处理程序使用+;=操作员和非操作员=,c#,events,delegates,compound-assignment,C#,Events,Delegates,Compound Assignment,也许我在谷歌搜索不够努力,但我想了解分配事件时的语法“+=”。例如,我们使用: myButton.Click += MyClickEvent; 而不是: myButton.Click = MyClickEvent; 为什么会这样?这里有数学课吗?为什么要添加地址?一个事件可以有多个处理程序,因此它不是分配,而是订阅。 您可以执行以下操作,然后将调用所有处理程序。 myButton.Click += MyClickEvent; myButton.Click += MyClickEvent1;

也许我在谷歌搜索不够努力,但我想了解分配事件时的语法“+=”。例如,我们使用:

myButton.Click += MyClickEvent;
而不是:

myButton.Click = MyClickEvent;

为什么会这样?这里有数学课吗?为什么要添加地址?

一个事件可以有多个处理程序,因此它不是分配,而是订阅。
您可以执行以下操作,然后将调用所有处理程序。

myButton.Click += MyClickEvent;
myButton.Click += MyClickEvent1;
myButton.Click += MyClickEvent2;
要取消订阅活动,请使用

myButton.Click -= MyClickEvent2;

一个事件可以有多个处理程序,因此它不是分配,而是订阅。
您可以执行以下操作,然后将调用所有处理程序。

myButton.Click += MyClickEvent;
myButton.Click += MyClickEvent1;
myButton.Click += MyClickEvent2;
要取消订阅活动,请使用

myButton.Click -= MyClickEvent2;

如果调用一个事件,则可以执行多个方法。因此,可以使用
+=
操作符将这些方法添加到事件中。如果一个方法不再执行,可以使用
-=
operator@SomeBody-啊,所以我的按钮。单击可以有效地维护要调用的方法的列表。我不知道。非常感谢。现在一切都有了意义。因为你将一个委托附加到事件上,这意味着向现有的东西添加一些东西,这最好用+=表示,在C中,这里的术语是“多播”——所有在C中创建的委托都是多播的;在.NET单播委托起源的某个时候是一件事,但事实上:它们不是(可能仍然可以通过IL创建一个try单播委托,但我需要检查)@MarcGravel我认为在MSIL中不可能,尽管其他实现可能允许。第14.6节特定于实现(Microsoft)如果调用一个事件,可以执行多个方法。因此,可以使用
+=
操作符将这些方法添加到事件中。如果一个方法不再执行,可以使用
-=
operator@SomeBody-啊,所以我的按钮。单击可以有效地维护要调用的方法的列表。我不知道。非常感谢。现在一切都有了意义。因为你将一个委托附加到事件上,这意味着向现有的东西添加一些东西,这最好用+=表示,在C中,这里的术语是“多播”——所有在C中创建的委托都是多播的;在.NET单播委托起源的某个时候是一件事,但事实上:它们不是(可能仍然可以通过IL创建一个try单播委托,但我需要检查)@MarcGravel我认为在MSIL中不可能,尽管其他实现可能允许。第14.6节具体实施(Microsoft)