C# 我应该手动删除我声明的事件处理程序吗?

标签 c# event-handling

好吧,这里举个例子:

  1. 我有 UserControl A、UserControl B、UserControl C 和一个 Windows 窗体。
  2. 此 Windows 窗体仅使用 UserControl A 启动。
  3. UserControl C 有 [Next] 和 [Back] 按钮。
  4. 比如,UserControl A 声明了一个事件处理程序。 UserControl A 中的函数之一实际上会引发事件调用以在 UserControl C 中执行一个函数。
  5. 因此,在 UserControl C 中,我必须添加 with

"UserControlA.OneFunction += this.UserControlC_Function;"

  1. 如果我单击 UserControl C 上的“下一步”按钮,它将处理 UserControl A 并将新的 UserControl B 添加到 Windows 窗体。但我从不手动删除此事件处理程序。

UserControl A 中的函数之一是调用者(声明事件的地方)。
UserControl C 中的功能之一是监听器。

所以,这些是我的问题:

  • 我应该在处理 UserControl A 之前手动删除处理程序吗?
  • 这个用户控件 A dispose 会自动删除之前声明的处理程序吗?
  • 我应该在某处添加这个吗?

"UserControlA.OneFunction -= this.UserControlC_Function;"

最佳答案

  1. 按照惯例,我们不这样做。并且由于在处理后不应该调用任何事件,因此没有必要这样做,除非相关控件的行为异常。
  2. 没有。至少没有从反射器上看到的代码。

关于C# 我应该手动删除我声明的事件处理程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6926364/

相关文章:

c# - .NET 垃圾收集器能否收集作为类成员的对象?

c# - 如何用多个线程写入单个文件?

javascript - jquery .off然后恢复为on

javascript - 就效率和优雅而言,添加和删除事件监听器或使用全局/高级变量来控制发射器事件逻辑更好吗?

.Net Treeview 事件处理

c# - 使用c#从文本中提取所有电子邮件地址

c# - 友好的端口名称组合框 c# Windows 窗体

c# - 将通用对象集合传递给需要基类型集合的方法

c# - OnItemUpdated 事件究竟何时在 ASP.NET 的 FormView 中触发?

javascript - 'a href' 按钮的单击功能未触发