假设我有两个类,Foo和Bar。 Foo没有(也没有)与Bar的关系。
但是,我想要一个bar实例保持活着,只要它的foo实例保持活着。 有没有办法这样做,没有foo实际引用bar?
谢谢, 柯恩
答案 0 :(得分:16)
使编译器能够将对象字段动态附加到托管对象。
它本质上是一个字典,其中键和值都是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类型一无所知。