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,则停止循环。相反,如果您试图创建这个没有结束的螺旋,那么可能需要添加一个每帧调用一次的更新方法,以避免实例中的操作过载
如果我确切地知道你想用这种逻辑创造什么,我可以给出一个不那么含糊的答案。如果不清楚,我很抱歉。在上述情况下,它会导致堆栈溢出异常。上面的代码创建了一个循环引用。如果执行代码,您可以找到问题所在。我想知道我们如何解决这样的循环引用?这不是很明显会爆炸吗?我提到了什么是循环引用。在你的例子中,你没有循环引用。你的代码有缺陷。你为什么不提一下你想做什么,好让我们帮你呢?嗨,约瑟夫,你的答案似乎很好。我的目的是学习如何在实时环境中克服这种问题。谢谢你的回复。