2

基本メンバーの初期化セクションはC#に存在しますか?検索と検索を試みましたが、 Listクラスの初期化に関する質問を出し続けました。私が参照している初期化リストは、ここにある例のようになります。

これを行う理由の1つは、クラスの定数を初期化することです。私は基本的に、次のことができるかどうかを理解しようとしています。

public class A{
    private const string _name;
    public A(string name): _name(name){
         //stuff
    }
}

繰り返しますが、私はこれをC ++ではなくC#で実行しようとしています。何かご意見は?

4

2 に答える 2

4

これは、コンストラクターで初期化されたプライベート読み取り専用フィールドを使用して行います。したがって、次のようになります。

public class A 
{
    private readonly string _name;

    public A (string name)
    {
        _name = name;
    }
}

フィールドは、readonlyインラインまたはコンストラクターでのみ初期化でき、その後は一定です。

于 2012-11-24T06:05:46.257 に答える
3

いいえ、C#は、C ++と同じように、コンストラクター本体の前のメンバーの初期化をサポートしていません。フィールドが宣言されたときにフィールドを初期化するか、コンストラクター本体内で通常の割り当てを使用することができます。

その位置で使用できるメソッドは2つだけです。基本クラスのコンストラクターを呼び出すことと、同じクラスの別のコンストラクターを呼び出すことです。詳細については、 C#仕様(つまり、 http: //www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf、セクション17.10インスタンスコンストラクター)を確認できます。

constructor-declaration:
    attributesopt constructor-modifiersopt constructor-declarator constructor-body

constructor-declarator:
   identifier ( formal-parameter-listopt ) constructor-initializer
constructor-initializer:
  : base ( argument-listopt )
  : this ( argument-listopt )
于 2012-11-24T06:12:45.087 に答える