首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免循环参考OOAD设计

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

Stack Overflow用户
提问于 2012-08-20 07:02:13
回答 2查看 434关注 0票数 0

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

代码语言:javascript
复制
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");
    }
}

如何避免循环引用?请告诉我不同的设计方案

EN

回答 2

Stack Overflow用户

发布于 2012-08-20 07:19:15

您的代码没有循环引用问题。

循环引用发生在您开始跟踪引用并以开始位置结束时。在您的例子中,您所做的是声明局部变量,然后有:

代码语言:javascript
复制
new ClassA()-> (calls) -> new ClassB()->(calls)->new ClassC()->calls->new ClassA()-> (calls) -> new ClassB()->(calls)-> etc forever  

GC非常聪明,可以解析循环引用,但是您所做的工作有根本的缺陷。也许你应该解释一下你想要达到的目标。

票数 5
EN

Stack Overflow用户

发布于 2012-08-20 07:22:10

这正在创造一种螺旋式的数据结构,这种结构是没有尽头的。然而,解决这个谜语并仍然能够从任何类(A、B或C)开始的最简单方法是向确定是否发生循环的对象中添加一个公用布尔标志。如果此标志为false,则继续,如果为真,则停止循环。如果您正试图无休止地创建此螺旋线,则可能需要添加一个名为每帧一次的update方法,以避免实例中的操作超载。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12033450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档