Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 129
- Предыдущая
- 129/642
- Следующая
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);}Вполне ожидаемо оба метода создания объекта работают, значения свойств отображаются, а попытка изменить свойство после конструирования приводит к ошибке на этапе компиляции.
Чтобы создать тип записи
CarRecordCarRecord.csrecord 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.csCarRecordCarConsole.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");Console.WriteLine("Another variable for my car: ");Console.WriteLine(anotherMyCarRecord.ToString());Console.WriteLine();// Попытка изменения свойства приводит к ошибке на этапе компиляции.// myCarRecord . Color = "Red";Console.ReadLine();Хотя мы пока еще не обсуждали эквивалентность (см. следующий раздел) или наследование (см. следующую главу) с типами записей, первое знакомство с записями не создает впечатления, что они обеспечивают большое преимущество. Текущий пример записи
CarRecordToString()/*************** RECORDS *********************/My car:CarRecord { Make = Honda, Model = Pilot, Color = Blue }Another variable for my car:CarRecord { Make = Honda, Model = Pilot, Color = Blue }Но взгляните на следующее обновленное определение записи
Carrecord CarRecord(string Make, string Model, string Color);В конструкторе так называемого позиционного типа записи определены свойства записи, а весь остальной связующий код удален. При использовании такого синтаксиса необходимо принимать во внимание три соображения. Во-первых, не разрешено применять инициализацию объектов типов записей, использующих компактный синтаксис определения, во-вторых, запись должна конструироваться со свойствами, расположенными в корректных позициях, и, в-третьих, регистр символов в свойствах конструктора точно повторяется в свойствах внутри типа записи.
Эквивалентность с типами записей
В примере класса
CarCar- Предыдущая
- 129/642
- Следующая
