誰かが次のコンストラクターの構文を説明してくれませんか? 私はこれまで遭遇したことがなく、同僚のコードで気づきました。
public Service () : this (Service.DoStuff(), DoMoreStuff())
{ }
誰かが次のコンストラクターの構文を説明してくれませんか? 私はこれまで遭遇したことがなく、同僚のコードで気づきました。
public Service () : this (Service.DoStuff(), DoMoreStuff())
{ }
同じクラスの別のコンストラクターにチェーンします。基本的に、どのコンストラクターも、を使用して同じクラスの別のコンストラクターにチェーンするか: this (...)
、を使用して基本クラスのコンストラクターにチェーンできます。どちらも持っていない場合は、 と同等です。: base(...)
: base()
連鎖コンストラクターは、インスタンス変数初期化子が実行された後、コンストラクターの本体の前に実行されます。
詳細については、コンストラクター チェーンに関する私の記事またはC# コンストラクターに関する MSDN のトピックを参照してください。
例として、次のコードを検討してください。
using System;
public class BaseClass
{
public BaseClass(string x, int y)
{
Console.WriteLine("Base class constructor");
Console.WriteLine("x={0}, y={1}", x, y);
}
}
public class DerivedClass : BaseClass
{
// Chains to the 1-parameter constructor
public DerivedClass() : this("Foo")
{
Console.WriteLine("Derived class parameterless");
}
public DerivedClass(string text) : base(text, text.Length)
{
Console.WriteLine("Derived class with parameter");
}
}
static class Test
{
static void Main()
{
new DerivedClass();
}
}
このMain
メソッドは、 のパラメーターなしのコンストラクターを呼び出しますDerivedClass
。これは の 1 パラメータ コンストラクタにDerivedClass
チェーンされ、次に の 2 パラメータ コンストラクタにチェーンされBaseClass
ます。その基本コンストラクターが完了すると、1 パラメーターのコンストラクターがDerivedClass
続行され、それが完了すると、元のパラメーターなしのコンストラクターが続行されます。したがって、出力は次のとおりです。
Base class constructor
x=Foo, y=3
Derived class with parameter
Derived class parameterless
Service.DoStuff()
この場合、2 つのパラメーター (との戻り値) を受け入れる 2 番目のコンストラクターが必要DoMoreStuff()
です。これら 2 つのメソッドは静的メソッドでなければなりません。