вторник, марта 13, 2007

C# 3.0 - чего изволите, господин программист?

Лень - двигатель прогресса. Или регресса? Уже не знаю. Нововведения в C# 3.0 меня совсем запутали в этом плане.
Scott Guthrie в своем блоге пишет о выходе March CTP Visual Studio и .Net Framework "Orcas" и о нововведениях в языке С#: автоматических свойствах, инициализаторах объектов и коллекций.
Что такое автоматические свойства? Вы пишите:

public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}


Компилятор автоматически генерирует аксессоры get set и приватные поля для ваших свойств. Скотт пишет, что это будет делать именно компилятор, а не студия путем автогенерации кода.
Инициализаторы классов и коллекций представляют собой более вразумительную фичу, но выглядят весьма непривычно. Положим, нам надо создать экземпляр класса Person и задать значения его свойств. Сделать это можно через параметризированный конструктор, если он есть. Либо просто, присваявая значения:

Person person = new Person();
person.FirstName = "Scott";
person.LastName = "Guthrie";
person.Age = 32;


Все вы знаете, что с параметризированными конструкторами всегда беда. Их либо слишком мало, либо слишком много, и всегда не понятно, в каком состоянии окажется созданный таким конструктором экземпляр. А добавление нового свойства? Добавил свойство и полез переписывать 7 и 9 конструкторов :)
Теперь есть вот такая каонструкция:

Person person = new Person { FirstName="Scott", LastName="Guthrie", Age=32 };


Нравится?
То-же самое можно делать с коллекциями.

List people = new List {
new Person { FirstName = "Scott", LastName = "Guthrie", Age = 32 },
new Person { FirstName = "Bill", LastName = "Gates", Age = 50 },
new Person { FirstName = "Susanne", LastName = "Guthrie", Age = 32 }
};

Комментариев нет: