gpt4 book ai didi

c# - 分离空事件处理程序

转载 作者:行者123 更新时间:2023-12-04 13:01:10 25 4
gpt4 key购买 nike

我受委托(delegate)清理我们代码中的内存泄漏,并进行检查以防止进一步泄漏。我注意到未分离的处理程序似乎是主要原因。大多数都是直截了当的,但是代码中有几件事让我摸不着头脑。

首先:

myObject.someEvent -= null;

我假设它什么都不做是正确的吗? (我知道如果事件是本地事件,您可以将其设置为 null,因为它本质上是一个多播委托(delegate))。

其次,对于匿名处理程序:

myObject.someEvent += ()=> { x + y; };<br/>
myObject.someEvent -= ()=> { x + y; };

我说第二条指令也没有值(value)是否正确,因为匿名方法将被编译为两个单独的委托(delegate),因此减法实际上并不指向需要删除的正确处理程序? (对于正在寻找解决此问题的合适解决方案的任何人,请查看 here)。

我不想满足于“是的,没错”,我想知道为什么这些东西不起作用(假设我的断言是正确的)。

最佳答案

来自docs :

It is important to notice that you cannot easily unsubscribe from an event if you used an anonymous function to subscribe to it. To unsubscribe in this scenario, it is necessary to go back to the code where you subscribe to the event, store the anonymous method in a delegate variable, and then add the delegate to the event . In general, we recommend that you do not use anonymous functions to subscribe to events if you will have to unsubscribe from the event at some later point in your code.

所以你是对的,你不能像那样删除匿名方法。以类似的方式,说 myObject.someEvent -= null; 也不会做任何事情

关于c# - 分离空事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11615415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com