0

オブジェクトをインスタンス化するときにオブジェクト初期化子を使用する場合、そのオブジェクトコンストラクターは初期化されたプロパティにアクセスできますか?

public class ExampleClass {
    public string proptery1 { get; set; }
    public string property2 { get; set; }

    public ExampleClass() {
        if(!string.IsNullOrEmpty(property1)) {
            ...
        }
    }
} 

ExampleClass exampleClass = new ExampleClass() {
    property1 = "hello",
    property2 = "world"
};
4

3 に答える 3

1

コレクション初期化子は、コレクションの.Addメソッドを呼び出します。これは、特定のコレクションに対して定義する必要があります。オブジェクトは、.Addに渡される前に完全に構​​築されます。

構文

ExampleClass exampleClass = new ExampleClass() {
    property1 = "hello",
    property2 = "world"
};

コレクション初期化子ではなく、オブジェクト初期化を示します。

ここでは、コンストラクターが呼び出され、次に指定されたプロパティのセッターが呼び出されます。

適切な例は

List<ExampleClass> list = new List<ExampleClass>() { 
    new ExampleClass() {
         exampleClass.property1 = "hello";
         exampleClass.property2 = "world";            
    }
}

イベントの順序は次のようになります

  1. の新しいインスタンスList<ExampleClass>が作成され、リストに割り当てられます
  2. ExampleClassの新しいインスタンスが作成され、コンストラクターが呼び出されます。
  3. プロパティセッターは、ExampleClassの新しいインスタンスで呼び出されます
于 2012-08-01T15:53:18.930 に答える
1

いいえ、プロパティが初期化される前にコンストラクタが呼び出されます。

あなたのコード:

ExampleClass exampleClass = new ExampleClass() {
    property1 = "hello",
    property2 = "world"
};

のための言語砂糖です

ExampleClass exampleClass = new ExampleClass();
exampleClass.property1 = "hello";
exampleClass.property2 = "world";
于 2012-08-01T15:53:28.887 に答える
1

いいえ、コンストラクターが最初に呼び出されます。オブジェクトの初期化は、コンストラクターを呼び出してからオブジェクトのプロパティを設定するための構文上の糖衣にすぎません。

于 2012-08-01T15:53:31.553 に答える