如果基类发布 C# 事件并且派生类订阅该事件(即订阅其自身)。事件订阅会阻止对象被垃圾收集吗?或者垃圾收集器是否足够聪明来检测这种循环引用情况。
乍一看,似乎应该如此,但我很确定我已经看到了执行此操作的控制代码。这是一个如此基本的问题,我不敢相信我以前从未研究过它。
编辑:胡安·R.我的意思是这样的。 (从未编译过这段代码,只是凭空输入,所以我可能会出现拼写错误/错误)
public class Base
{
public event EventHandler<double> ValueChanged;
}
public class Derived : Base
{
public Derived()
{
// Will this prevent my object from being collected?
ValueChanged += OnValueChanged;
}
private void OnValueChanged(object sender, double v)
{
}
}
订阅自己事件的对象不会导致内存泄漏,原因很简单,CLR GC 基于可达性,而不是引用计数。如果该对象可从 GC 根访问,则无论如何它都不符合 GC 的条件。如果它不可访问,则自引用不会使其可访问。就事件而言,没有什么特别的GCing 循环引用 https://stackoverflow.com/questions/8840567/garbage-collector-and-circular-reference.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)