C#:在对象之间创建强引用,而不引用另一个对象

假设我有2个类,Foo和Bar。 Foo没有(也没有)与Bar的关系。

但是,我想要一个bar实例保持活着,只要它的foo实例保持活着。 有没有办法这样做,没有foo实际引用吧?

谢谢,Koen

看看ConditionalWeakTable类 。

使编译器能够将对象字段动态附加到托管对象。

它本质上是一个字典,其中键和值都是WeakReference,只要键处于活动状态,该值就会保持活动状态。

例如,您可以定义一个

ConditionalWeakTable table 

并添加一个Foo / Bar对。 只要存在对Foo实例的引用,Bar实例就会保持活动状态。 您可以通过查看表找到Foo实例的Bar实例。

如果不确切地知道你想要实现什么,或者你的“活着”是什么意思,就很难提出建议。 通常,您不必担心托管对象的生命周期:当它们不再被引用时,它们会自然“死亡”。

但要执行您想要的操作,要么您的Foo实例必须引用Bar实例,要么其他一些对象必须引用它们才能创建链接。 它可以是作为System.ObjectBar实例的引用,即Foo不需要知道Bar Type。

如果SOMETHING有参考,那么只能最终确定栏。 让Foo告诉那个东西什么时候可以放开Bar吧。

你能在Foo类型中创建一个名为BarReference的公共对象字段吗?
Foo之外的人应该为这个属性设置适当的Bar实例。
只要存在对bar实例的引用,它就不会被GCed并且使用对象Foo对Bar类型一无所知。