-1

この問題は解決されましたが、すべてのソリューションは実際には単純なプログラムでのみ機能します。これを行うためのより効率的な方法を見つけたいと思っています。だから私はこのコードを持っていると仮定しましょう

public class Parent
{
    int one;
    int two;
    public Parent(int A, int B)
    {
        one = A;
        two = B;
    }
}
public class Child : Parent
{
    int three;
    int four;
    public Child(int C, int D)
    {
        three = C;
        four = D;
    }
}

わかりましたので、Child にはすべての親変数とそのすべての新しい変数があります (int 1 と 2、および 3 と 4 があります)。子オブジェクトを作成するとき

Child myChild = new Child(3,4);

子コンストラクターで指定された 2 つの値しか入力できず、実際には 4 つの変数値 (親からの 2 つと子からの 2 つ) すべてを設定する必要があります。私が見つけたこれに対する唯一の解決策は、

public class Child : Parent
{
    int three;
    int four;
    public Child(int A, int B, int C, int D) : base(A, B)
    {
        three = C;
        four = D;
    }
}

ただし、私は数十の子クラスと約30の親変数を扱っているため、上記のソリューションは非常に大きくなり、親変数に加えられた変更はすべての子クラスで手動で変更する必要があります. 親コンストラクターを子コンストラクターにタグ付けする簡単な方法、または上記で提案されたものよりも効率的な他のソリューションはありますか?

4

2 に答える 2

0

あなたがいる場合

数十の子クラスと約 30 の親変数を処理する

アーキテクチャに重大な問題があります。継承よりも構成について読むことをお勧めしますhttp://en.wikipedia.org/wiki/Composition_over_inheritanceまたは継承よりも構成を優先しますか? .

しかし、それについて何もできない場合は、このParent 変数を 1 つのオブジェクトにグループ化し、このオブジェクトをコンストラクターに渡すことをお勧めします。

于 2013-03-23T11:27:46.007 に答える
0

フィールドを公開し、コンストラクターを削除し、任意の数のメンバーを定義し、クラスを次のように宣言します。

public class Parent {
    public int one;
    public int two;
}

public class Child: Parent {
    public int three;
    public int four;
}

そしてそれを次のようにインスタンス化します

var child=
    new Child {
        one=1,
        two=2,
        three=3,
        four=4
    };
于 2013-03-23T11:22:37.650 に答える