2016-03-21 16 views
0

最も近いスレッドはthis oneでしたが、シナリオが異なります - 呼び出される基本コンストラクタがデフォルトのものです。ここでは、渡すパラメータを指定する必要があります。このオーバーロードとベースオーバーロードの両方をコンストラクタで呼び出すことはできますか?

は、私たちが次のシナリオを持っていると言う:

public class Base 
    { 
     public string Str; 

     public Base(string s) 
     { 
      Str = s; 
     } 
    } 

    public class A : Base 
    { 
     public string Str2; 

     public A(string str2) 
      : base(str2) 
     { 
      Str2 = str2; 
     } 

     public A(string str2, string str) 
      : base(str) 
     { 
      Str2 = str2; 
     } 
    } 

私はAの第二コンストラクタのオーバーロードで同じロジックを繰り返さないようにしたい(技術的に私はコピー&ペースト/保守性の向上を削減する機能にすべてのロジックをラップすることができ、最後にすべてのオーバーロードが同じコードに依存します。他に解決策がない場合はこれに従います)。

私は最初のAの1番目のコンストラクタをオーバーロードし、後で1番目のコンストラクタを呼び出すことができると考えました。しかし、私はできないようです。

ここでのアプローチは何ですか?

答えて

2

正しいアプローチは

public class A : Base 
{ 
    public string Str2; 

    public A(string str2) 
     : this(str2, str2) 
    { 
    } 

    public A(string str2, string str) 
     : base(str) 
    { 
     Str2 = str2; 
    } 
} 

あろうAの単一のパラメータコンストラクタはthis(代わりにbase(を使用して、両方のパラメータに同じ文字列でA通過の2パラメータコンストラクタを呼び出します。すべての作業が2つのパラメーターコンストラクターで行われているため、単一パラメーターコンストラクターの本体を削除します。

関連する問題