我有类似下面的类结构,下面的场景将创建一个循环引用。如何避免这种情况?
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");
}
}
如何避免循环引用?请告诉我不同的替代方案来设计这个
答案 0 :(得分:5)
您的代码没有循环引用问题 当您开始关注引用并最终到达开始位置时,将发生循环引用。在你的情况下,你所做的是声明局部变量然后你有:
new ClassA()-> (calls) -> new ClassB()->(calls)->new ClassC()->calls->new ClassA()-> (calls) -> new ClassB()->(calls)-> etc forever
GC很聪明,可以解决循环引用,但你所做的事情从根本上是有缺陷的。也许你应该解释一下你想要实现的目标。
答案 1 :(得分:2)
这创造了一个没有尽头的螺旋数据结构。 但是,解决这个问题并且仍然可以从任何类(A,B或C)开始的最简单方法是向对象添加一个公共布尔标志,以确定是否发生了循环。如果此标志为false,则继续,如果为true,则停止循环。如果你试图创建没有结束的螺旋,你可能需要添加一个每帧调用一次的更新方法,以避免实例中的操作过载。
如果我确切地知道你试图用这种逻辑创造什么,我可以给出一个不那么模糊的答案。如果不清楚,我很抱歉。