C #: criar referência forte entre objects, sem um referenciando o outro

Suponha que eu tenha 2 classs, Foo e Bar. Foo não tem (e não pode ter) uma relação com Bar.

No entanto, quero que uma instância de barra permaneça ativa, desde que a instância permaneça viva. Existe alguma maneira de fazer isso, sem foo realmente referenciando bar?

Obrigado Koen

Dê uma olhada na class ConditionalWeakTable .

Permite que os compiladores anexem dinamicamente campos de objects a objects gerenciados.

É essencialmente um dictionary em que tanto a chave quanto o valor são WeakReference e o valor é mantido ativo enquanto a chave estiver ativa.

Por exemplo, você pode definir um

ConditionalWeakTable table 

e adicione um par Foo / Bar. A instância Bar é mantida viva desde que exista uma referência à ocorrência Foo. Você pode encontrar a instância Bar para a instância Foo olhando a tabela.

É difícil dar sugestões sem saber exatamente o que você está tentando alcançar, ou o que você quer dizer com “vivo”. Normalmente, você não precisa se preocupar com o tempo de vida de objects gerenciados: eles “morrem” naturalmente quando não são mais referenciados.

Mas, para fazer o que você parece querer, sua instância Foo deve referenciar a instância Bar , ou algum outro object deve fazer referência a ambos para criar o link. Pode ser uma referência a uma instância Bar como System.Object , ou seja, Foo não precisa saber sobre o tipo de Bar .

A barra só pode ser finalizada se ALGO tiver uma referência a ela. Apenas diga para Foo quando pode largar Bar.

Você pode criar um campo de object público chamado BarReference no tipo Foo?
Alguém fora de Foo deve definir a instância apropriada de Bar para essa propriedade.
Contanto que exista uma referência à instância da barra, ela não será usada e usar o object Foo não sabe nada sobre o tipo de barra.