Szukaj…


Składnia

  • SomeClass sc = nowy SomeClass {Właściwość1 = wartość1, Właściwość2 = wartość2, ...};
  • SomeClass sc = nowy SomeClass (param1, param2, ...) {Właściwość1 = wartość1, Właściwość2 = wartość2, ...}

Uwagi

Nawiasy konstruktora można pominąć tylko wtedy, gdy tworzony jest typ domyślny (bez parametrów) konstruktor.

Proste użycie

Inicjatory obiektów są przydatne, gdy trzeba utworzyć obiekt i od razu ustawić kilka właściwości, ale dostępne konstruktory nie są wystarczające. Powiedz, że masz klasę

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

    // the rest of class definition
}

Aby zainicjować nowe wystąpienie klasy za pomocą inicjatora:

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

Jest to równoważne z

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

Użycie z typami anonimowymi

Inicjatory obiektów są jedynym sposobem inicjowania typów anonimowych, które są typami generowanymi przez kompilator.

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

Z tego powodu inicjatory obiektów są szeroko stosowane w zapytaniach typu LINQ select, ponieważ zapewniają wygodny sposób określania, które części zapytanego obiektu są zainteresowane.

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

Użycie w konstruktorach innych niż domyślne

W razie potrzeby można łączyć inicjatory obiektów z konstruktorami, aby inicjować typy. Weźmy na przykład klasę zdefiniowaną jako taka:

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" }

Spowoduje to najpierw utworzenie instancji Book z konstruktorem Book(int) , a następnie ustawienie każdej właściwości w inicjalizatorze. Jest to równoważne z:

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow