如何保持对象的弱引用?

Buh*_*ica 4 c# garbage-collection weak-references

(仅供参考:这个问题是半理论的.这不是我明确计划做的事情.)

我希望能够保留对我创建的所有对象的引用.也许是这样的:

class Foo
{
    private static List<Foo> AllMyFoos = new List<Foo>();

    public Foo()
    {
        AllMyFoos.Add(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做的麻烦在于,现在我的所有Foos都不会失去焦点并被垃圾收集.有没有办法在不妨碍垃圾收集器的情况下保持拒绝?

理想情况下,我只是一个仍在使用的Foos列表,而不是所有使用过的Foos.

Mat*_*ský 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
}
Run Code Online (Sandbox Code Playgroud)

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

  • 还有`ConditionalWeakTable <K,V>`,这取决于OP的确切要求.http://msdn.microsoft.com/en-us/library/dd287757.aspx (2认同)