Console.WriteLine("Another variable for my car: ");
Console.WriteLine(anotherMyCarRecord.ToString());
Console.WriteLine();
// Попытка изменения свойства приводит к ошибке на этапе компиляции.
// myCarRecord . Color = "Red";
Console.ReadLine();
Хотя мы пока еще не обсуждали эквивалентность (см. следующий раздел) или наследование (см. следующую главу) с типами записей, первое знакомство с записями не создает впечатления, что они обеспечивают большое преимущество. Текущий пример записи CarRecord
ToString()
для типов записей более причудлив, как видно в показанном ниже фрагменте вывода:/*************** RECORDS *********************/
My car:
CarRecord { Make = Honda, Model = Pilot, Color = Blue }
Another variable for my car:
CarRecord { Make = Honda, Model = Pilot, Color = Blue }
Но взгляните на следующее обновленное определение записи Car
record CarRecord(string Make, string Model, string Color);
В конструкторе так называемого
Эквивалентность с типами записей
В примере класса Car
Car
создавались с одними и теми же данными. В приведенной далее проверке Console.WriteLine($"Cars are the same? {myCar.Equals(anotherMyCar)}");
// Эквивалентны ли экземпляры Car?
Однако они не эквивалентны. Вспомните, что типы записей представляют собой специализированный вид класса, а классы являются
Car
на тот же самый объект:Console.WriteLine($"Cars are the same reference?
{ReferenceEquals(myCar, anotherMyCar)}");
// Указывают ли экземпляры Car на тот же самый объект?
Запуск программы дает приведенный ниже результат:
Cars are the same? False
CarRecords are the same? False
Типы записей ведут себя по-другому. Они неявно переопределяют Equals()
==
и !=
, чтобы производить результаты, как если бы экземпляры были типами значений. Взгляните на следующий код и показанные далее результаты:Console.WriteLine($"CarRecords are the same?
{myCarRecord.Equals(anotherMyCarRecord)}");
// Эквивалентны ли экземпляры CarRecord?
Console.WriteLine($"CarRecords are the same reference?
{ReferenceEquals(myCarRecord,another
MyCarRecord)}");
// Указывают ли экземпляры CarRecord на тот же самый объект?
Console.WriteLine($"CarRecords are the same?
{myCarRecord == anotherMyCarRecord}");
Console.WriteLine($"CarRecords are not the same?
{myCarRecord != anotherMyCarRecord}");
Вот результирующий вывод:
/*************** RECORDS *********************/
My car:
CarRecord { Make = Honda, Model = Pilot, Color = Blue }
Another variable for my car:
CarRecord { Make = Honda, Model = Pilot, Color = Blue }
CarRecords are the same? True
CarRecords are the same reference? false