(仅供参考:这个问题是半理论的。这不是我明确计划做的事情。)
我希望能够保留对我创建的所有对象的引用。也许是这样的:
class Foo
{
private static List<Foo> AllMyFoos = new List<Foo>();
public Foo()
{
AllMyFoos.Add(this);
}
}
这样做的麻烦在于,现在我的所有Foos都不会失去焦点并被垃圾收集。有没有办法在不妨碍垃圾收集器的情况下保持参与?
理想情况下,我只是列出了仍在使用的Foos,而不是所有曾经使用过的Foos。
答案 0 :(得分:6)
使用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
,或者以某种其他方式将其置于状态它不准备再次使用。
答案 1 :(得分:1)
有一种特殊的东西,就是这样命名 - WeakReference