gpt4 book ai didi

c# - 使用无操作 lambda 表达式来初始化事件是否会阻止 GC?

转载 作者:行者123 更新时间:2023-11-30 19:32:41 24 4
gpt4 key购买 nike

可以使用以下构造来声明事件:

public class MyClass
{
public event EventHandler<EventArgs> SomeEvent = (s,e) => {};

public void SomeMethod ()
{
// Do something interesting... ;)
SomeEvent (this, new EventArgs);
}
}

这允许在无需检查事件是否为 null 的情况下引发事件。

现在,假设对象 A 持有对 MyClass 对象的引用,注册了该事件,然后在稍后取消注册。

var myClass = new MyClass();
myClass.SomeEvent += MyHandler;
...
myClass.SomeEvent -= MyHandler;
myClass = null;

即使事件上仍有空操作 lambda 表达式,GC 是否会收集 myClass?

我猜是因为对象根不再被其他对象引用...任何人都可以证实或证明吗?

最佳答案

即使您没有删除“真正的”处理程序,也可以收集 MyClass 的实例。

事件的正常“泄漏”是事件发布者(在本例中为MyClass)通过订阅的事件处理程序引用了另一个对象。事件不会阻止发布者 被垃圾回收。空操作 lambda 肯定对此没有影响。

关于c# - 使用无操作 lambda 表达式来初始化事件是否会阻止 GC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4945423/

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