如何保持对对象的弱引用
本文关键字:引用 对象 何保持 | 更新日期: 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