到达方法时避免循环依赖

时间:2013-03-21 20:56:00

标签: c#

我一直在试图弄清楚我遇到的依赖关系问题。我需要从A到B的引用,但也需要B到A.这甚至可能吗? A保存我需要在B中使用的声明类型,因此我需要访问A到B和B到A。

有没有办法绕过这个或任何想法? A中的类型无法移动,B中的方法也无法移动。 (否则不会有任何问题)。

GUI - Factory - XMLSerialize,其中Factory是A,XML是B

//此致

3 个答案:

答案 0 :(得分:2)

这听起来不仅可能,听起来很正常。例如,Person类可以引用Department类,Department可以引用Person。你可以在这里找到这方面的例子。

尽量避免在Person中制作Department实例变量(属性)。您希望将引用保持为尽可能短,以避免内存泄漏。

答案 1 :(得分:2)

这段代码有循环引用,编译得很好:

public class A {
    B b;
}

public class B {
    A a;
}

所以我不确定究竟是什么导致了你的问题。也许你试图让A和B各自作为不同的组件(又名不同的dll)?不幸的是,这是不可能的。

如果您处于这种情况,那么您可以做的最好的就是:

装配1:

public interface IA { ... }
public interface IB { ... }

装配2(取决于1):

public class A {
  IB b;
}

装配3(取决于2):

public class B {
  IA a;
}

装配4(取决于1-3):

B b = new B();
A a = new A();
b.a = a;
a.b = b;

答案 2 :(得分:1)

简短的回答是否定的。你不能有循环依赖。你的问题的常见解决方案是将共享功能抽象为第三类,然后从A和B引用它。如果你说这是不可能的,那么也许你的目标是不可能的。