6

誰かが次の構文糖衣について説明してもらえますか?

protected MyConstructor() : this(null)

主にこの部分に興味があります: " : this(null)"

protected、コンストラクター、および「this」キーワードがどのように機能するかは知っていますが、混乱しており、すべてのオンライン検索でまとめられた最後の部分の詳細情報を見つけることができません。

編集:パブリック抽象クラスにあることを追加する必要があります。したがって、コンストラクターは実装者のコンストラクターを呼び出していると思います。

ありがとう

4

4 に答える 4

9

パラメーターを持つ別のクラス コンストラクターを呼び出します。

protected MyConstructor() : this(null) { }  // This calls the other constructor

protected MyConstructor(object whatever)
{
    Frob(whatever);
}
于 2014-01-15T17:29:43.837 に答える
8

これは、コンストラクターの特別な構文です。次の 2 つの基本的なバリアントを使用できます。

protected MyConstructor() : this(null)

パラメーターを使用して、コンストラクターの別のオーバーロードを呼び出しnullます。

protected MyConstructor() : base(null)

パラメーターを使用して基本クラスのコンストラクターを呼び出しnullます。

したがって、次のようなクラスを作成できます。

class MyClass
{
  object someObject;

  public MyClass() : this(null) {}
  public MyClass(object someObject) { this.someObject = someObject; }
}

これで、次のようにクラスをインスタンス化できます。

var c = new MyClass(); // c.someObject is null
var c2 = new MyClass(new object()); // c2.someObject is some new object instance

これは、コンストラクター コードを他の方法で再利用できないため必要です。メソッドをオーバーライドまたはオーバーロードするだけの場合、同等のものは次のようになります。

public void DoStuff()
{
  DoStuff(null);
}

public void DoStuff(object someObject)
{
  // Do some stuff
}
于 2014-01-15T17:29:30.500 に答える
5

同じオブジェクトには別のコンストラクターがあり、何らかの種類のnull 許容オブジェクトを取ります。例えば:

public MyConstructor(string str)
{
   // A
}


public MyConstructor() : this(null)
{
   // B
}

この例 (publicデモンストレーション目的でコンストラクターを変更) では、次のように呼び出します。

var newObj = new MyConstructor();

MyConstructorオブジェクトを作成し、A最初にコードを実行し (パラメーターとして渡しnullます)、次にコードを実行しますB

これは、呼び出されるコンストラクターに関係なく実行する必要がある共通コードを統合できるようにする方法です。

于 2014-01-15T17:29:34.140 に答える
3

実行してthis(null)いるのは、1 つのパラメーターを受け取る同じクラス内の別のコンストラクターを呼び出し、そのパラメーターとして null 値を渡すことです。詳細については、調べてくださいconstructor overloading。また、constructor chainingあなたの質問により適切ですが、両方のトピックを調べます。

于 2014-01-15T17:29:24.170 に答える