7

私は次のものを持っているとしましょう:

class Base {
    public Base (int n) { }
    public Base (Object1 n, Object2 m) { }
}

class Derived : Base {

    string S;

    public Derived (string s, int n) : base(n) {
        S = s;
    }

    public Derived (string s, Object1 n, Object2 m) : base(n, m) {
        S = s; // repeated
    }
}

Derived の両方のオーバーロードで仮引数 n が必要であるため、このN = n;行を繰り返さなければならないことに注意してください。

これで別のメソッドにカプセル化できることがわかりましたが、両方のオーバーロードから同じ 2 つのメソッドを呼び出す必要があります。それで、おそらくthisと組み合わせて使用​​ することで、これを行うためのより「エレガントな」方法はありbaseますか?

これは、1 つの引数を取るプライベート コンストラクターを持つことができs、他の 2 つのオーバーロードがそれを呼び出すことができるようにするためです...または、これは別のプライベート メソッドを持つことと同じでしょうか?

4

2 に答える 2

6

そのための理想的な解決策はありません。コンストラクターでコードを繰り返さないようにする方法はありますが、パラメーターDerivedのデフォルト値を繰り返す必要があります。m

public Derived (string s, int n) : this(s, n, 0) {}
于 2011-02-26T12:24:49.073 に答える
0

少しだけ改善されましたが…

class Derived : Base
{
    string S;
    public Derived(string s, int n) : this(s,n,-1)
    {
    }

    public Derived(string s, int n, int m) : base(n, m)
    {
        S = s;
        // repeated    
    }
}
于 2011-02-26T12:22:13.263 に答える