【C#】C# 事件 两次 -= 会怎么样?
在 C# 中,事件(event
)的 +=
和 -=
运算符用于添加和移除事件处理器(delegate)。以下是两次 -=
和 +=
的具体行为:
🔁 两次 -=
(移除)
示例代码:
MyEvent -= Handler;
MyEvent -= Handler;
行为:
- 第一次
-=
: 如果Handler
存在于事件列表中,它会被移除一次。 - 第二次
-=
: 如果此时Handler
已不在事件中,则不会抛异常,也不会有任何效果。
✅ 是安全的,即使事件处理器已经不在里面了,也不会抛出异常。
🔁 两次 +=
(添加)
示例代码:
MyEvent += Handler;
MyEvent += Handler;
行为:
Handler
被添加了两次。- 当事件触发时,
Handler
会被调用两次。
⚠️ 所以如果你不小心多次添加处理器,会导致 重复调用,可能产生性能问题或副作用(例如界面重复刷新、日志重复写入等)。
✅ 结论总结
操作方式 | 说明 |
---|---|
+= 两次 | 添加两次,事件触发时会执行两次 |
-= 两次 | 第一次移除成功,第二次若找不到,忽略无异常 |
混用 += 和 -= | 最后事件中处理器出现的次数 = 添加次数 - 移除次数 |
✅ 示例完整代码
public event EventHandler MyEvent;void Handler(object sender, EventArgs e) => Console.WriteLine("Handled!");void Test()
{MyEvent += Handler;MyEvent += Handler;MyEvent -= Handler;MyEvent -= Handler;MyEvent -= Handler; // 这次不会抛异常,也不会有影响MyEvent?.Invoke(this, EventArgs.Empty); // 不会输出任何东西,因为都移除了
}