C #: Crear una referencia fuerte entre objetos, sin que uno haga referencia al otro

Supongamos que tengo 2 clases, Foo y Bar. Foo no tiene (y no puede tener) una relación con Bar.

Sin embargo, quiero que una instancia de barra permanezca con vida, siempre y cuando se mantenga viva. ¿Hay alguna forma de hacerlo, sin que foo haga referencia a la barra?

Gracias koen

Echa un vistazo a la clase ConditionalWeakTable .

Permite a los comstackdores adjuntar dinámicamente campos de objetos a objetos gestionados.

Esencialmente, es un diccionario donde tanto la clave como el valor son una Referencia débil, y el valor se mantiene vivo mientras la clave esté viva.

Por ejemplo, puede definir un

ConditionalWeakTable table 

y añadir un par Foo / Bar. La instancia de Bar se mantiene viva mientras exista una referencia a la instancia de Foo. Puede encontrar la instancia de la barra para la instancia de Foo mirando la tabla.

Es difícil dar sugerencias sin saber exactamente lo que estás tratando de lograr, o lo que quieres decir con “vivo”. Normalmente, no debería preocuparse por la vida útil de los objetos administrados: estos “mueren” de forma natural cuando ya no están referenciados.

Pero para hacer lo que pareces querer, tu instancia de Foo debe hacer referencia a la instancia de la Bar o algún otro objeto debe hacer referencia a ambos para crear el enlace. Podría ser una referencia a una instancia de Bar como un objeto System.Object , es decir, Foo no necesita saber sobre el tipo de Bar .

La barra no solo puede finalizarse si ALGO tiene una referencia a ella. Solo haz que Foo diga esa cosa cuando puede dejar ir a Bar.

¿Se puede crear un campo de objeto público llamado BarReference en el tipo Foo?
Alguien fuera de Foo debería establecer la instancia adecuada de Bar en esta propiedad.
Siempre que haya una referencia a la instancia de la barra, no se calculará Y el objeto Foo no sabrá nada sobre el tipo de barra.