0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: records, ссылочный тип данных, неизменяемые типы</p>
1
<p>Теги: records, ссылочный тип данных, неизменяемые типы</p>
2
<p>Начиная с C# 9, появился новый ссылочный тип под названием<strong>Records</strong>. Его ключевая особенность в том, что он способен представлять неизменяемый immutable-тип, который, если сравнивать с классами, имеет ряд дополнительных возможностей.</p>
2
<p>Начиная с C# 9, появился новый ссылочный тип под названием<strong>Records</strong>. Его ключевая особенность в том, что он способен представлять неизменяемый immutable-тип, который, если сравнивать с классами, имеет ряд дополнительных возможностей.</p>
3
<p>Может возникнуть закономерный вопрос: а зачем нам вообще нужны неизменяемые типы? Фишка в том, что эти типы более безопасны в случаях, когда необходимо гарантировать, что данные объекта меняться не будут. В принципе, в том же .NET тоже существуют неизменяемые типы, к примеру, String.</p>
3
<p>Может возникнуть закономерный вопрос: а зачем нам вообще нужны неизменяемые типы? Фишка в том, что эти типы более безопасны в случаях, когда необходимо гарантировать, что данные объекта меняться не будут. В принципе, в том же .NET тоже существуют неизменяемые типы, к примеру, String.</p>
4
<p>Для определения<strong>records</strong>используют соответствующее ключевое слово<strong>record</strong>:</p>
4
<p>Для определения<strong>records</strong>используют соответствующее ключевое слово<strong>record</strong>:</p>
5
<p>Как уже было сказано выше, records -- это ссылочные типы. При этом на уровне промежуточного языка IL, в который и компилируется программный код C#, для record, по сути, создается класс.</p>
5
<p>Как уже было сказано выше, records -- это ссылочные типы. При этом на уровне промежуточного языка IL, в который и компилируется программный код C#, для record, по сути, создается класс.</p>
6
<p>Важно добавить, что records являются immutable лишь при некоторых определенных условиях. К примеру, у нас есть возможность использовать определенный выше тип Person так:</p>
6
<p>Важно добавить, что records являются immutable лишь при некоторых определенных условиях. К примеру, у нас есть возможность использовать определенный выше тип Person так:</p>
7
<p>Выполнение данного кода не вызовет ошибки, а мы без проблем сможем изменить значения свойств нашего объекта Person. Если же мы захотим сделать его по-настоящему неизменяемым, следует вместо обычных сеттеров использовать init-модификатор.</p>
7
<p>Выполнение данного кода не вызовет ошибки, а мы без проблем сможем изменить значения свойств нашего объекта Person. Если же мы захотим сделать его по-настоящему неизменяемым, следует вместо обычных сеттеров использовать init-модификатор.</p>
8
<p>Выше мы уже получим ошибку, пытаясь поменять значение свойств объекта Person.</p>
8
<p>Выше мы уже получим ошибку, пытаясь поменять значение свойств объекта Person.</p>
9
<p>Вообще,<strong>records</strong>похожи на обычные классы, к примеру, они могут быть абстрактными, их можно или наследовать, или запрещать наследование посредством оператора<strong>sealed</strong>. Однако существует и ряд отличий, но это уже тема отдельной статьи.</p>
9
<p>Вообще,<strong>records</strong>похожи на обычные классы, к примеру, они могут быть абстрактными, их можно или наследовать, или запрещать наследование посредством оператора<strong>sealed</strong>. Однако существует и ряд отличий, но это уже тема отдельной статьи.</p>
10
<p><em>По материалам https://metanit.com/sharp/.</em></p>
10
<p><em>По материалам https://metanit.com/sharp/.</em></p>
11
11