2013-03-21 88 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

相關問題