c# - 如何为另一个对象注销另一个对象的事件处理程序?

标签 c# event-handling

我有 3 个对象。 对象 A 有一个其他对象可以订阅的事件 X。 对象 B 注册对象 A 的 X 事件。

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

最佳答案

你不需要 - 事件的关键在于它封装了发布/订阅部分,这样就没有其他人可以搞砸了。

现在,如果您(对象 C)可以一直充当对象 B 的代理,那就另当别论了。如果您公开对象 B 订阅的自己的事件,而不是它订阅对象 A - 如果您代表对象 B 订阅对象 A,那么有多种方法可以取消订阅对象 A。但是,除非您参与了该过程,否则您有什么“权利”去扰乱另一段代码的事件处理程序?

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

关于c# - 如何为另一个对象注销另一个对象的事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2605226/

相关文章:

go - 领域事件的可靠异步处理

actionscript-3 - flex中的target和currenttarget有什么区别?

c++ - 等待事件的线程并不总是捕获事件信号

c# - 在 C# 中为声明后的数组赋值或创建和初始化数组之间有什么区别?

c# - 如何生成[0,1]范围内的随机双数?

c# - 不支持资源所有者密码凭据授予类型

javascript - Nativescript - 使用按钮引用访问 'Binding Context'

c# - 通用类型参数没有装箱或类型参数转换

c# - 获取无法访问页面的 Windows 或 IIS 用户

javascript - event.preventDefault() 与返回 false