Почему в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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