如何为另一个对象取消注册另一个对象的事件处理程序?

时间:2010-04-09 05:20:02

标签: c# event-handling

我有3个物体。 对象A具有其他对象可以订阅的事件X. 对象B为对象A的X事件注册。

如何从对象C中的对象A的X事件中注销对象B?

1 个答案:

答案 0 :(得分:1)

你没有 - 事件的关键是它封装了pub / sub部分,以便其他任何人都不会搞乱。

现在,如果你(对象C)可以在整个时间充当对象B的代理,那就是另一回事了。如果您公开自己的事件,对象B订阅而不是订阅对象A - 并且如果您代表对象B订阅对象A ,那么有各种方法可以从对象A取消订阅。但除非你参与了这个过程,否则你有什么“正确”的东西会让另一段代码的事件处理程序变得混乱?

编辑:只是为了了解你的反思点...如果你有适当的权限,那么你可能能够找到一个支持该事件的字段。此时,您可以直接检查它 - 但这并不意味着您知道哪些处理程序已由对象B添加 。您可以找到类型对象B或嵌套类型中的处理程序方法,但这些方法不必由对象B添加 - 而对象B可以从其他类添加处理程序。基本上没有什么可说“谁”订阅一个事件 - 只有处理程序是什么。