Records в C#

Начиная с C# 9, появился новый ссылочный тип под названием Records. Его ключевая особенность в том, что он способен представлять неизменяемый immutable-тип, который, если сравнивать с классами, имеет ряд дополнительных возможностей.

Может возникнуть закономерный вопрос: а зачем нам вообще нужны неизменяемые типы? Фишка в том, что эти типы более безопасны в случаях, когда необходимо гарантировать, что данные объекта меняться не будут. В принципе, в том же .NET тоже существуют неизменяемые типы, к примеру, String.

Для определения records используют соответствующее ключевое слово record:

Как уже было сказано выше, records -- это ссылочные типы. При этом на уровне промежуточного языка IL, в который и компилируется программный код C#, для record, по сути, создается класс.

Важно добавить, что records являются immutable лишь при некоторых определенных условиях. К примеру, у нас есть возможность использовать определенный выше тип Person так:

Выполнение данного кода не вызовет ошибки, а мы без проблем сможем изменить значения свойств нашего объекта Person. Если же мы захотим сделать его по-настоящему неизменяемым, следует вместо обычных сеттеров использовать init-модификатор.

Выше мы уже получим ошибку, пытаясь поменять значение свойств объекта Person.

Вообще, records похожи на обычные классы, к примеру, они могут быть абстрактными, их можно или наследовать, или запрещать наследование посредством оператора sealed. Однако существует и ряд отличий, но это уже тема отдельной статьи.

По материалам https://metanit.com/sharp/.