Saltar al contenido

¿Cómo resolver la referencia circular?

Ya no tienes que indagar más por todo internet porque llegaste al espacio correcto, poseemos la respuesta que quieres sin problema.

Solución:

En la mayoría de los casos, cuando tuve que hacer que dos cosas se hicieran referencia entre sí, creé una interfaz para eliminar la referencia circular. Por ejemplo:

ANTES DE

public class Foo

    Bar myBar;


public class Bar

    Foo myFoo;

Gráfico de dependencia:

Foo     Bar
 ^       ^
 |       |
Bar     Foo

Foo depende de Bar, pero Bar también depende de Foo. Si están en ensamblajes separados, tendrá problemas para construir, especialmente si realiza una reconstrucción limpia.

DESPUÉS

public interface IBar



public class Foo

    IBar myBar;


public class Bar : IBar

    Foo myFoo;

Gráfico de dependencia:

Foo, IBar     IBar
    ^          ^
    |          |
   Bar        Foo

Tanto Foo como Bar dependen de IBar. No hay dependencia circular, y si IBar se coloca en su propio ensamblaje, Foo y Bar en ensamblajes separados ya no serán un problema.

Le diría a tu amigo que necesita repensar su diseño. Las referencias circulares como las que usted describe son a menudo un olor a código de una falla de diseño.

A diferencia de C++ (por ejemplo), C# no necesita declaraciones de reenvío para resolver referencias circulares. Por eso:

public class A

    public B B  get;set; 


public class B

    public A A  get;set; 

Sin embargo, esto suele ser un indicador de decisiones de diseño cuestionables.

Valoraciones y comentarios

Puedes añadir valor a nuestro contenido colaborando tu veteranía en las notas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *