我有以下情况。
List<WeakReference<MyClass>>
,MyClass
有一个名为MyEvent
的事件。我遍历列表,对于每个活着的引用,我可能会在它的目标上调用MyEvent
。
在我的代码的其他部分,我保留对这些对象的实时引用。让我们说这个过程看起来像这样:
var list = new List<WeakReference<MyClass>>();
var a = new MyClass();
a.MyEvent += delegate {
DoSomeStuff(a);
};
list.Add(new WeakReference<MyClass>(a));
现在假设我没有进一步使用a
,并决定处置它。现在,a = null
。
我有一个定期检查设置,清除原始的死引用列表。我想知道的是,我连接的这个事件处理程序是否会使a
的{{1}}实例保持活动状态,从而阻止我从列表中清除它?
如果事件不仅仅是正常的MyClass
,而是将Action
作为参数传递给处理程序,该怎么办?在某种程度上,该处理程序仍然具有对原始对象的引用,即使处理程序可能永远不会被调用。
这可能是非常明显的,我可以想到类似的情况,我知道答案,但事实上,我在这个对象上挂钩这个功能让我很怀疑。如果确实让它保持活力,那么它就会破坏我的整个系统,所以我需要知道。