3

誰かが次のコンストラクターの構文を説明してくれませんか? 私はこれまで遭遇したことがなく、同僚のコードで気づきました。

public Service () : this (Service.DoStuff(), DoMoreStuff())
{ }
4

2 に答える 2

7

同じクラスの別のコンストラクターにチェーンします。基本的に、どのコンストラクターもを使用して同じクラスの別のコンストラクターにチェーンする: 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
于 2012-08-20T11:28:07.350 に答える
6

Service.DoStuff()この場合、2 つのパラメーター (との戻り値) を受け入れる 2 番目のコンストラクターが必要DoMoreStuff()です。これら 2 つのメソッドは静的メソッドでなければなりません。

于 2012-08-20T11:27:09.600 に答える