如何保持对对象的弱引用

本文关键字:引用 对象 何保持 | 更新日期: 2023-09-27 18:10:52

(仅供参考:这个问题有一半是理论。这不是我一定要做的事

我希望能够保持对我创建的所有对象的引用。也许像这样:

class Foo
{
    private static List<Foo> AllMyFoos = new List<Foo>();
    public Foo()
    {
        AllMyFoos.Add(this);
    }
}

这样做的问题是,现在我的Foos都不会失去焦点并被垃圾收集。有没有一种方法可以在不妨碍垃圾收集器的情况下保持引用?

理想情况下,我只需要一个仍在使用的foo列表,而不是所有曾经使用过的foo。

如何保持对对象的弱引用

使用WeakReference -它做的正是它应该做的。使用它时要小心——你必须在每次解引用时检查引用是否仍然有效。

教程。


Foo foo = AllMyFoos[index].Target as Foo;
if (foo == null)
{
   // Object was reclaimed, so we can't use it.
}
else
{
   // foo is valid. My theoretical curiosity can be satisfied
}

警告:仅仅因为对象还没有被垃圾收集并不意味着有人没有对它调用Dispose,或者以其他方式将它置于不准备再次使用的状态

有一个特殊的东西就是这样命名的——WeakReference