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

C# 如何为另一个对象取消注册另一个对象的事件处理程序?,c#,event-handling,C#,Event Handling,我有三个物体。 对象A有一个其他对象可以订阅的事件X。 对象B为对象A的X事件注册 如何从对象C中的对象A的X事件中注销对象B?您不知道-事件的要点是它封装了发布/订阅部分,这样其他人就不会弄乱了 现在,如果你(对象C)可以一直充当对象B的代理,那就不同了。如果您公开了自己的事件,对象B订阅了该事件而不是订阅了对象A,并且如果您代表对象B订阅了对象A,那么有多种方法可以取消订阅对象A。但是,除非您参与了该过程,否则您有什么“权利”去干扰另一段代码的事件处理程序 编辑:只是为了拾取你的反射点。。。

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


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

您不知道-事件的要点是它封装了发布/订阅部分,这样其他人就不会弄乱了

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


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

O.k.谢谢,我也这么认为,我将面临一个架构边界。我想可能有一些疯狂的“反射”式后门,但没有。回到绘图板上。