3

次のコードでは:

public class A
{
public A():this(null){}
public A(string b){/*code here*/}
}

最初のコンストラクターの使用は何ですか?

4

7 に答える 7

26

null最初のコンストラクターは、2 番目のコンストラクターのパラメーター b に渡しています。

したがって、呼び出すnew A()と、呼び出すのと同じになりますnew A(null)

于 2009-10-30T07:34:13.060 に答える
5

パラメータを持つコンストラクタがある場合

public A(string b){ /* code here */ }

public A():this("") { }  //default

デフォルトのコンストラクターは、実際には "" をパラメーターとして "パラメーター コンストラクター" を呼び出します。パラメータを渡しています。これは、同じコードを 2 回記述することを避けるために行われます。

于 2009-10-30T07:35:25.733 に答える
3

コンストラクターのオーバーロードです。

とにかく、文字列の初期化されていない値がnullである可能性が最も高いため、この場合はあまり役に立たないように思われることに同意します。

C# のコンストラクターも参照してください。

于 2009-10-30T07:37:03.363 に答える
3

これは、コンストラクターをオーバーロードしているときに発生します。

あなたの例では、空public A():this(null){}のコンストラクターは、null のオブジェクト値を受け取ることができるコンストラクターを探します。文字列は null を取ることができるオブジェクトであるため、そのコンストラクターを呼び出します。

この例は非常に単純に見えます。

より意味のある例 (ただし、基本的なままにしておきます):

 public class AddNumbers
{
   public AddNumbers():this(100, 100)
   {     }

   public AddNumbers(int x, int y)
   {     
         int sum = x + y;
         Console.WriteLine(sum.ToString());
   }    
}

この例では、呼び出しプログラムが空のコンストラクターを呼び出すと、200 が出力されます。これは、x = 100、y = 100 で AddNumbers メソッドを呼び出しているためです。

簡単な例だと思いますが、それがより明確になることを願っています。

于 2009-10-30T07:43:18.383 に答える
1

これは、b==null で second を呼び出すデフォルトのコンストラクターです。

于 2009-10-30T07:36:46.797 に答える
0

一部のインターフェイスまたはデザイナーでは、「パラメーターのない」コンストラクターが必要です。

そんな時にこの方法は重宝します。

于 2009-10-30T14:22:05.377 に答える
0

オブジェクトの初期化を使用する場合は、パラメーターなしの既定のコンストラクターが必要です。

Employee e = new Employee() {FirstName="John", LastName="Smith"};

ただし、この場合、おそらくコンストラクター チェーンは使用しません。コンストラクターのオーバーロードは、パラメーターで初期化する別の方法を提供します。コンストラクター チェーンが本当に役立つのは、コンストラクター パラメーターをオプションにする場合です。C# はオプションのパラメーターを (まだ) サポートしていません。

「ベスト プラクティス」は、状況、使用法、アーキテクチャ、要件などによって異なります (ISO コンサルティング ルール 1:「場合による」)。

于 2009-10-30T14:30:27.997 に答える