私は種類の基本的な組成を有している:'new'を使わずにコンストラクションクラスを構築できますか?
class A{
public A(B1 b1, B2 b2){
this.b1 = b1;
this.b2 = b2;
}
public B1 b1 {get; private set;}
public B2 b2 {get; private set;}
}
class B1{
public B1(C1 c1, C2 c2, C3 c3){
this.c1 = c1;
this.c2 = c2;
this.c3 = c3;
}
public C1 c1 {get; private set;}
public C2 c2 {get; private set;}
public C3 c3 {get; private set;}
}
class B2{
public B2(C1 c1, C2 c2, C3 c3){
this.c1 = c1;
this.c2 = c2;
this.c3 = c3;
}
public C1 c1 {get; private set;}
public C2 c2 {get; private set;}
public C3 c3 {get; private set;}
}
class C1{}
class C2{}
class C3{}
はA
を構築するクリーンな方法はありますか?
public static void Main()
{
A a = new A(new B1(new C1(), new C2(), new C3()), new B2(new C1(), new C2(), new C3()));
}
new
を使用せずに同じ構成を実現できますか?
これを可能にするためにコンストラクタに何かできることはありますか?
異なる「c1」、「c2」、「c3」は何を表していますか? –
すべてのデフォルトコンストラクタなので、すべてのコンストラクタパラメータに 'null'のデフォルト値を与え、' this.c1 = c1 ??新しいC1(); 'しかし、私はあなたがパラメータ化されたコンストラクタを表すためにデフォルトのコンストラクタを使用していると感じています。 –
'new'をコンストラクタに内部化し、効果的に必要なパラメータだけを設定することができます。または、IoC(理にかなっている)を使用してより洗練されたソリューションを使用することもできます。 –