1

私は依存関係で抱えているこの問題を理解しようとしています。クラスAからBへの参照だけでなく、BからAへの参照も必要です。これは可能ですか? A は、B で使用する必要がある宣言された型を保持しているため、A から B および B から A の両方にアクセスする必要があります。

これを回避する方法やアイデアはありますか?A の型は移動できず、B のメソッドも移動できません。(それ以外は問題ありません)。

GUI - Factory - XMLSerialize (Factory は A、XML は B)

//よろしく

4

3 に答える 3

2

これは可能であるように聞こえるだけでなく、正常に聞こえます。たとえば、PersonクラスはDepartmentクラスへの参照をDepartment持つことができ、はへの参照を持つことができますPerson。この例はいたるところにあります。

Personでインスタンス変数(プロパティ)を作成しないようにしてくださいDepartment。メモリリークを回避するために、参照をできるだけ短命に保つ必要があります。

于 2013-03-21T21:15:30.220 に答える
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;
于 2013-03-21T23:43:51.930 に答える
1

簡単な答えはノーです。循環依存関係を持つことはできません。問題の一般的な解決策は、共有機能を3番目のクラスに抽象化し、それをAとBから参照することです。これが不可能な場合は、おそらく目標は不可能です。

于 2013-03-21T21:14:21.693 に答える