Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 124
- Предыдущая
- 124/642
- Следующая
Console.WriteLine("Number of Cars in garage: {0}", g.NumberOfCars);
// Вывести название автомобиля.
Console.WriteLine("Your car is named: {0}", g.MyAuto.PetName);
Console.ReadLine();
Инициализация автоматических свойств
Наряду с тем, что предыдущий подход работает вполне нормально, в версии C# 6 появилась языковая возможность, которая содействует упрощению способа присваивания автоматическим свойствам их начальных значений. Как упоминалось ранее в главе, полю данных в классе можно напрямую присваивать начальное значение при его объявлении. Например:
class Car
{
private int numberOfDoors = 2;
}
В похожей манере язык C# теперь позволяет присваивать начальные значения лежащим в основе поддерживающим полям, которые генерируются компилятором. В результате смягчаются трудности, присущие добавлению операторов кода в конструкторы класса, которые обеспечивают корректную установку данных свойств.
Ниже приведена модифицированная версия класса
Garage
MyAuto
Car
class Garage
{
// Скрытое поддерживающее поле установлено в 1.
public int NumberOfCars { get; set; } = 1;
// Скрытое поддерживающее поле установлено в новый объект Car.
public Car MyAuto { get; set; } = new Car();
public Garage(){}
public Garage(Car car, int number)
{
MyAuto = car;
NumberOfCars = number;
}
}
Наверняка вы согласитесь с тем, что автоматические свойства — очень полезное средство языка программирования С#, т.к. отдельные свойства в классе можно определять с применением модернизированного синтаксиса. Конечно, если вы создаете свойство, которое помимо получения и установки закрытого поддерживающего поля требует дополнительного кода (такого как логика проверки достоверности, регистрация в журнале событий, взаимодействие с базой данных и т.д.), то его придется определять как "нормальное" свойство .NET Core вручную. Автоматические свойства C# не делают ничего кроме обеспечения простой инкапсуляции для лежащей в основе порции (сгенерированных компилятором) закрытых данных.
Понятие инициализации объектов
На протяжении всей главы можно заметить, что при создании нового объекта конструктор позволяет указывать начальные значения. Вдобавок свойства позволяют безопасным образом получать и устанавливать лежащие в основе данные. При работе со сторонними классами, включая классы из библиотеки базовых классов .NET Core, нередко обнаруживается, что в них отсутствует конструктор, который позволял бы устанавливать абсолютно все порции данных состояния. В итоге программист обычно вынужден выбирать наилучший конструктор из числа возможных и затем присваивать остальные значения с использованием предоставляемого набора свойств.
Обзор синтаксиса инициализации объектов
Для упрощения процесса создания и подготовки объекта в C# предлагается синтаксис инициализации объектов. Такой прием делает возможным создание новой объектной переменной и присваивание значений многочисленным свойствам и/или открытым полям в нескольких строках кода. Синтаксически инициализатор объекта выглядит как список разделенных запятыми значений, помещенный в фигурные скобки (
{}
Чтобы увидеть данный синтаксис в действии, создайте новый проект консольного приложения по имени
ObjectInitializers
Point
class Point
{
public int X { get; set; }
public int Y { get; set; }
public Point(int xVal, int yVal)
{
X = xVal;
Y = yVal;
}
public Point() { }
public void DisplayStats()
{
Console.WriteLine("[{0}, {1}]", X, Y);
}
}
А теперь посмотрим, как создавать объекты
Point
Console.WriteLine("***** Fun with Object Init Syntax *****\n");
// Создать объект Point, устанавливая каждое свойство вручную.
Point firstPoint = new Point();
firstPoint.X = 10;
firstPoint.Y = 10;
firstPoint.DisplayStats();
// Или создать объект Point посредством специального конструктора.
Point anotherPoint = new Point(20, 20);
anotherPoint.DisplayStats();
// Или создать объект Point, используя синтаксис инициализации объектов.
Point finalPoint = new Point { X = 30, Y = 30 };
finalPoint.DisplayStats();
Console.ReadLine();
- Предыдущая
- 124/642
- Следующая