C# 如何保持对对象的弱引用?

C# 如何保持对对象的弱引用?,c#,garbage-collection,weak-references,C#,Garbage Collection,Weak References,(仅供参考:这是一个半理论性的问题。我并不打算做这件事。) 我希望能够保留对我创建的所有对象的引用。也许是这样: class Foo { private static List<Foo> AllMyFoos = new List<Foo>(); public Foo() { AllMyFoos.Add(this); } } class-Foo { 私有静态列表AllMyFoos=new List(); 公共食物( { 添

(仅供参考:这是一个半理论性的问题。我并不打算做这件事。)

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

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

    public Foo()
    {
        AllMyFoos.Add(this);
    }
}
class-Foo
{
私有静态列表AllMyFoos=new List();
公共食物(
{
添加(这个);
}
}
这样做的问题是,现在我的所有foo都不能失去焦点而被垃圾收集。有没有办法在不妨碍垃圾收集器的情况下保留引用

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

使用-它完全按照它应该做的做。使用时要小心-每次取消引用时都必须检查引用是否仍然有效



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

有一个特殊的东西正是这样命名的-

如果您有引用,那么它就不能被收集了,所以你应该换一种方式来考虑这个问题。。也许如果你解释一下你想从哪里得到理论,我们会更有帮助?GC应该如何知道两者的区别。在应该保留哪些对象和垃圾收集哪些对象的背后必须有某种逻辑。如果有一些逻辑,你应该能够实现它。IDisposable接口是消除不需要的对象的一种方法。只需在dispose方法中将对象从静态列表中删除即可。@gbianchi您说得不太对,在中有
WeakRefernce
。net@vittore是的,看起来谷歌知道这一点;)。。我问的是OP想要达到的理论目标,但答案已经掩盖了这一点……根据OP的确切要求,还有
ConditionalWeakTable
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
}