Oop 如何避免循环参考OOAD设计

Oop 如何避免循环参考OOAD设计,oop,Oop,我有如下的类结构,下面的场景将创建一个循环引用。如何避免这种情况 public class classA { public classA() { classB b= new classB(); b.classBMethod(); } public void classAMethod() { Console.WriteLine("Class A Method"); } } public class cl

我有如下的类结构,下面的场景将创建一个循环引用。如何避免这种情况

public class classA
{
    public classA()
    {
        classB b= new classB();
        b.classBMethod();
    }
    public void classAMethod()
    {
        Console.WriteLine("Class A Method");
    }
}
public class classB
{
    public classB()
    {
        classC c = new classC();
        c.classCMethod();
    }
    public void classBMethod()
    {
        Console.WriteLine("Class B Method");
    }
}
public class classC
{
    public classC()
    {
        classA a = new classA();
        a.classAMethod();
    }
    public void classCMethod()
    {
        Console.WriteLine("Class C Method");
    }
}
如何避免循环引用?请告诉我不同的设计方案


您的代码没有循环引用问题。
循环引用发生在您开始跟随引用并在开始的地方结束时。在您的情况下,您所做的是声明局部变量,然后您有:

new ClassA()-> (calls) -> new ClassB()->(calls)->new ClassC()->calls->new ClassA()-> (calls) -> new ClassB()->(calls)-> etc forever  

GC足够聪明,可以解析循环引用,但您所做的根本上是有缺陷的。也许你应该解释一下你想要实现什么。

这是在创建一个没有尽头的螺旋式数据结构。 但是,要解决这个谜题并且仍然能够从任何类(A、B或C)开始,最简单的方法是向对象添加一个公共布尔标志,以确定是否发生了循环。如果此标志为false,则继续,如果为true,则停止循环。相反,如果您试图创建这个没有结束的螺旋,那么可能需要添加一个每帧调用一次的更新方法,以避免实例中的操作过载


如果我确切地知道你想用这种逻辑创造什么,我可以给出一个不那么含糊的答案。如果不清楚,我很抱歉。

在上述情况下,它会导致堆栈溢出异常。上面的代码创建了一个循环引用。如果执行代码,您可以找到问题所在。我想知道我们如何解决这样的循环引用?这不是很明显会爆炸吗?我提到了什么是循环引用。在你的例子中,你没有循环引用。你的代码有缺陷。你为什么不提一下你想做什么,好让我们帮你呢?嗨,约瑟夫,你的答案似乎很好。我的目的是学习如何在实时环境中克服这种问题。谢谢你的回复。