C# Language
Инициализаторы объектов
Поиск…
Синтаксис
- SomeClass sc = new SomeClass {Property1 = value1, Property2 = value2, ...};
- 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
с помощью конструктора Book(int)
, а затем задает каждое свойство в инициализаторе. Это эквивалентно:
var someBook = new Book(16);
someBook.Title = "Don Quixote";
someBook.Author = "Miguel de Cervantes";