【问题标题】:C# why does assigning an event handler use a += operator and not =C# 为什么分配事件处理程序使用 += 运算符而不是 =
【发布时间】:2021-07-02 23:32:27
【问题描述】:

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

myButton.Click += MyClickEvent;

而不是:

myButton.Click = MyClickEvent;

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

【问题讨论】:

  • 如果一个事件被调用,可以执行几个方法。因此,您可以使用 += 运算符将这些方法添加到事件中。如果不再执行某个方法,您可以使用-= 运算符再次删除它
  • @SomeBody - 啊,所以 myButton.Click 有效地维护了要调用的方法列表。我不知道。谢谢你。现在一切都说得通了。
  • 因为您为事件附加一个代表,这意味着向现有的东西添加一些东西,这在 C# 中最好表示为 +=
  • 这里的术语是“多播”——在 C# 中创建的所有委托都是多播的;在 .NET 单播委托的起源中的某个时刻是一件事,但实际上:它们不是(它可能仍然可以通过 IL 创建一个尝试单播委托,但我' d需要检查)
  • @MarcGravell 我不相信它在 MSIL 中是可能的,尽管其他实现可能允许它。 ECMA-335 Section 14.6 Implementation-Specific (Microsoft)

标签: c# events delegates compound-assignment


【解决方案1】:

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

myButton.Click += MyClickEvent;
myButton.Click += MyClickEvent1;
myButton.Click += MyClickEvent2;

要取消订阅活动,请使用

myButton.Click -= MyClickEvent2;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多