2013-03-21 83 views
1

我一直在试图找出这个问题,我与依赖关系。我需要从A级到B级的参考,还有B级到A级。这甚至有可能吗? A持有宣布类型,我需要在B中使用,所以我需要访问A到B和B到A.在达到方法时避免循环依赖

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

GUI - 厂 - XMLSerialize来,其中厂是A和XML是乙

//问候

+0

你是什么意思的 '持有声明类型' 呢?当然可以用方法/属性/域相互引用来声明两个类。 – MiMo 2013-03-21 21:26:16

回答

1

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

+0

对于程序集而言,这是真的,但不是类。 – nunzabar 2013-03-21 21:17:42

+0

@nunzabar - 循环引用,没问题,没问题。循环依赖(即继承),从不(类或集合)。 – MarcF 2013-03-21 21:21:31

2

这不仅听起来可能,这听起来很正常。例如,Person课程可能会提及Department课程,而Department可能提及Person。你会发现这个地方的例子。

只要尽量避免在Department中制作Person实例变量(属性)。您希望尽可能缩短引用时间以避免内存泄漏。

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; 
+0

是的,我将不得不这样做。非常感谢您的帮助! – user1501127 2013-03-22 07:43:57