2

我有以下情况。

A 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的活动实例,MyClass进而阻止我从列表中清理它?

如果事件不仅仅是一个普通Action的,而是一个Action<MyClass>将自身作为参数传递给处理程序的事件怎么办?在某种程度上,该处理程序仍然具有对原始对象的引用,即使该处理程序可能永远不会被调用。

这可能真的很明显,我可以想到类似的情况,我知道答案,但是我将这个函数挂在对象上的事实让我怀疑。如果它确实让它活着,它会破坏我的整个系统,所以我需要知道。

4

0 回答 0