Почему в C# классы записей неизменяемы, а структуры записей — нет?C#

Место общения программистов C#
Anonymous
Почему в C# классы записей неизменяемы, а структуры записей — нет?

Сообщение Anonymous »

Меня учили, что структуры почти всегда должны быть неизменяемыми, поэтому такое необычное поведение классов записей по сравнению со структурами записей застало меня врасплох.
Использование класса записи...

Код: Выделить всё

record class Person(string FirstName, string LastName);
Person p = new("John", "Smith");
p.FirstName = "Jack" // Not allowed!
Использование структуры записи...

Код: Выделить всё

record struct Person(string FirstName, string LastName);
Person p = new("John", "Smith");
p.FirstName = "Jack" // Fine!
Использование структуры записи, доступной только для чтения...

Код: Выделить всё

readonly record struct Person(string FirstName, string LastName);
Person p = new("John", "Smith");
p.FirstName = "Jack" // Now allowed!
Почему структуры записей не только для чтения изменяются по умолчанию и почему такое же поведение не применяется к классам записей?
Изменить: я думаю, я спрашиваю, почему синтаксис... странный?
Например, это выглядело бы более логично, как:
  • Код: Выделить всё

    record class
     – изменяемый ссылочный тип с семантикой значений.
  • Код: Выделить всё

    readonly record class
    неизменяемый ссылочный тип с семантикой значений.
  • Код: Выделить всё

    record struct
     – изменяемый тип значения с семантикой значения.
  • Код: Выделить всё

    readonly record struct
     — неизменяемый тип значения с семантикой значения.


Подробнее здесь: https://stackoverflow.com/questions/730 ... e-not-in-c

Вернуться в «C#»