サーチ…


構文

  • SomeClass sc =新しいSomeClass {Property1 =値1、Property2 =値2、...};
  • SomeClass sc = new SomeClass(param1、param2、...){Property1 = value1、Property2 = value2、...}

備考

コンストラクタのカッコは、インスタンス化される型がデフォルトの(パラメータなしの)コンストラクタを使用できる場合にのみ省略できます。

簡単な使い方

オブジェクト初期化子は、オブジェクトを作成してすぐにいくつかのプロパティを設定する必要がある場合に便利ですが、使用可能なコンストラクタでは不十分です。クラスがあるとします

public class Book
{
    public string Title { get; set; }
    public string Author { get; set; }

    // the rest of class definition
}

初期化子を使用してクラスの新しいインスタンスを初期化するには:

Book theBook = new Book { Title = "Don Quixote", Author = "Miguel de Cervantes" };

これは

Book theBook = new Book();
theBook.Title = "Don Quixote";
theBook.Author = "Miguel de Cervantes";

匿名型の使用

オブジェクト初期化子は、コンパイラによって生成される型である匿名型を初期化する唯一の方法です。

var album = new { Band = "Beatles", Title = "Abbey Road" };

そのため、オブジェクト初期化子は、照会対象のオブジェクトのどの部分に興味があるかを指定する便利な方法を提供するため、LINQ選択クエリで広く使用されています。

var albumTitles = from a in albums 
                  select new 
                  { 
                     Title = a.Title, 
                     Artist = a.Band 
                  };

デフォルト以外のコンストラクタでの使用

必要に応じて、オブジェクト初期化子をコンストラクタと組み合わせて型を初期化することができます。たとえば、次のように定義されたクラスを取る:

public class Book {
    public string Title { get; set; }
    public string Author { get; set; }

    public Book(int id) {
        //do things
    }

    // the rest of class definition
}

var someBook = new Book(16) { Title = "Don Quixote", Author = "Miguel de Cervantes" }

これは、まずBook(int)コンストラクタでBookをインスタンス化し、次にイニシャライザの各プロパティを設定します。これは次のようになります。

var someBook = new Book(16);
someBook.Title = "Don Quixote";
someBook.Author = "Miguel de Cervantes";


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow