我的类结构如下所示,下面的场景将创建一个循环引用。如何避免这种情况?
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");
}
}如何避免循环引用?请告诉我不同的设计方案
发布于 2012-08-20 07:19:15
您的代码没有循环引用问题。
循环引用发生在您开始跟踪引用并以开始位置结束时。在您的例子中,您所做的是声明局部变量,然后有:
new ClassA()-> (calls) -> new ClassB()->(calls)->new ClassC()->calls->new ClassA()-> (calls) -> new ClassB()->(calls)-> etc forever GC非常聪明,可以解析循环引用,但是您所做的工作有根本的缺陷。也许你应该解释一下你想要达到的目标。
发布于 2012-08-20 07:22:10
这正在创造一种螺旋式的数据结构,这种结构是没有尽头的。然而,解决这个谜语并仍然能够从任何类(A、B或C)开始的最简单方法是向确定是否发生循环的对象中添加一个公用布尔标志。如果此标志为false,则继续,如果为真,则停止循环。如果您正试图无休止地创建此螺旋线,则可能需要添加一个名为每帧一次的update方法,以避免实例中的操作超载。
我可以给出一个不那么含糊的答案,如果我确切地知道你试图用这种逻辑来创造什么。如果不清楚的话,我很抱歉。
https://stackoverflow.com/questions/12033450
复制相似问题