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

时间:2011-10-26 06:51:38

标签: c#

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

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

谢谢, 柯恩

4 个答案:

答案 0 :(得分:16)

查看ConditionalWeakTable Class

  

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

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

例如,您可以定义

ConditionalWeakTable<Foo, Bar> table

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果SOMETHING有引用,则只能最终确定Bar。只要让Foo告诉那个东西,它可以放开Bar。

答案 3 :(得分:0)

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