Объяснение инициализаторов объектов в C #? - PullRequest
0 голосов
/ 14 мая 2011

Может ли кто-нибудь предоставить объяснение инициализаторов объектов в C # и примеры, если это возможно.

Насколько я понимаю, они позволяют вам сокращать экземпляры класса, это правильно?

Ответы [ 4 ]

2 голосов
/ 14 мая 2011

Инициализаторы объектов были добавлены в C # в версии 3 и предоставляют сокращенный синтаксис инициализации объектов.Это не что иное, как синтаксический сахар, то есть они позволяют вам выразить тот же код короче, чем раньше.

Вот пример:

Foo foo = new Foo { Name = "John", Age = 42 };

Что эквивалентно:

Foo foo = new Foo();
foo.Name = "John";
foo.Age = 42;

Ознакомьтесь с официальной документацией здесь .

Связанная функция - это инициализаторы коллекций, которые позволяют легко инициализировать коллекции:

var names = new List<string> { "John", "Michael", "Joe" }

Приведенный выше код является сокращением для создания нового списка, а затем добавления к нему каждого элемента.Чтобы инициализаторы коллекций работали для типа, не требуется ничего, кроме метода public Add, принимающего правильный тип в качестве параметра.

0 голосов
/ 14 мая 2011

Инициализаторы объекта позволяют вам установить свойства экземпляра при его объявлении.Например:

class House
{
    public int Rooms { get; set; }
    public int PeopleLiving { get; set; }
}

Затем используйте это:

House h = new House { Rooms = 4, PeopleLiving = 5 }

Просто задайте эти значения при создании объекта, немного как конструктор, где вы можете выбрать, какие свойства устанавливать.Вы также можете использовать конструктор:

House h = new House("10 Some Road", "Some City") { Rooms = 4, PeopleLiving = 5 }

На самом деле это просто синтаксический сахар, компилятор преобразует его в этот эквивалентный код C #:

House h = new House();
h.Rooms = 4;
h.PeopleLiving = 5;
0 голосов
/ 14 мая 2011

Из MSDN

Инициализаторы объектов позволяют вам присваивать значения любым доступным полям или свойствам объекта во время создания без явного вызова конструктора.

Все это означает, что это удобный ярлык, который вы можете использовать, чтобы (надеюсь) сделать ваш код более читабельным.Пример, который они приводят:

Cat cat = new Cat { Age = 10, Name = "Fluffy" };

был бы более традиционно записан как:

Cat cat = new Cat();
cat.Age = 10;
cat.Name = "Fluffy";

или

Cat = new Cat(10, "Fluffy");

Первый может быть более длинным, а тамэто разница между скомпилированным кодом (спасибо @ Kirk Woll за ссылку), объясненная в этого поста .Инициализатор создает временную переменную, назначает свойства и затем копирует их в реальную переменную.Примерно так:

Cat temporaryCat = new Cat();
temporaryCat.Age = 10;
temporaryCat.Name = "Fluffy";
Cat cat = temporaryCat;

Последнее (до C # 4.0 с необязательными аргументами) потребовало бы иметь много перегруженных версий вашего конструктора для каждой возможной комбинации параметров.

0 голосов
/ 14 мая 2011

Инициализаторы объектов позволяют вам присваивать значения любым доступным полям или свойствам объекта во время создания без явного вызова конструктора.

Cat cat = new Cat { Age = 10, Name = "Fluffy" };

См. Инициализаторы объектов и коллекций (Руководство по программированию в C #) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...