取消订阅订阅者的 .NET 事件
有人问我一个关于事件的非常有趣的问题。我认为答案是否定的,但我很好奇是否有一种我不知道的方法。
在下一个代码示例中,我可以从引用类 B 或其方法 X 中删除订阅吗?
Class1 A = new Class1();
Class2 B = new Class2();
A.DoneIt += B.X;
意味着在不访问 A 类的情况下执行 A.DoneIt -= BX;
操作(也不通过对 A 类的反射)。
I was asked a very interesting question about events. I think the answer is no but I'm curious if there is a way that I don't know of.
in the next code sample, can I delete the subscription from the referring class B or its Method X??
Class1 A = new Class1();
Class2 B = new Class2();
A.DoneIt += B.X;
meaning doing A.DoneIt -= B.X;
without any access to Class A(nor by reflection on class A).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不可以,您只能在可以访问该活动的情况下取消订阅。
代表指向一种方式,即一种方法。该方法没有返回事件的指针。因此,对要取消订阅的事件的唯一访问是通过其定义的类型实例。
进一步阅读:事件和代表
No, you can only unsubscribe if you can access the event.
Delegates point one way, i.e. to a method. The method has no pointer back to the event. So the only access to the event to unsubscribe is through the type instance it's defined on.
Further reading: Events And Delegates