C# Language
Inicjatory obiektów
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";