В версии C# 9.0 появился особый вид классов —
Чтобы приступить к экспериментам с записями, создайте новый проект консольного приложения по имени FunWithRecords
Car
из примеров, приведенных ранее в главе:class Car
{
public string Make { get; set; }
public string Model { get; set; }
public string Color { get; set; }
public Car() {}
public Car(string make, string model, string color)
{
Make = make;
Model = model;
Color = color;
}
}
Как вы уже хорошо знаете, после создания экземпляра этого класса вы можете изменять любое свойство во время выполнения. Если каждый экземпляр должен быть неизменяемым, тогда можете модифицировать определения свойств следующим образом:
public string Make { get; init; }
public string Model { get; init; }
public string Color { get; init; }
Для использования нового класса Car
Program.cs
создаются два его экземпляра — один через инициализацию объекта, а другой посредством специального конструктора: using System;
using FunWithRecords;
Console.WriteLine("Fun with Records!");
// Использовать инициализацию объекта
Car myCar = new Car
{
Make = "Honda",
Model = "Pilot",
Color = "Blue"
};
Console.WriteLine("My car: ");
DisplayCarStats(myCar);
Console.WriteLine();
// Использовать специальный конструктор
Car anotherMyCar = new Car("Honda", "Pilot", "Blue");
Console.WriteLine("Another variable for my car: ");
DisplayCarStats(anotherMyCar);
Console.WriteLine();
// Попытка изменения свойства приводит к ошибке на этапе компиляции.
// myCar.Color = "Red";
Console.ReadLine();
static void DisplayCarStats(Car c)
{
Console.WriteLine("Car Make: {0}", c.Make);
Console.WriteLine("Car Model: {0}", c.Model);
Console.WriteLine("Car Color: {0}", c.Color);
}
Вполне ожидаемо оба метода создания объекта работают, значения свойств отображаются, а попытка изменить свойство после конструирования приводит к ошибке на этапе компиляции.
Чтобы создать тип записи CarRecord
CarRecord.cs
со следующим кодом:record CarRecord
{
public string Make { get; init; }
public string Model { get; init; }
public string Color { get; init; }
public CarRecord () {}
public CarRecord (string make, string model, string color)
{
Make = make;
Model = model;
Color = color;
}
}
Запустив приведенный далее код из Program.cs
CarRecord
будет таким же, как у класса Car
со средствами доступа только для инициализации:Console.WriteLine("/*************** RECORDS *********************/");
// Использовать инициализацию объекта
CarRecord myCarRecord = new CarRecord
{
Make = "Honda",
Model = "Pilot",
Color = "Blue"
};
Console.WriteLine("My car: ");
DisplayCarRecordStats(myCarRecord);
Console.WriteLine();
// Использовать специальный конструктор
CarRecord anotherMyCarRecord = new CarRecord("Honda", "Pilot", "Blue");