HTML Diff
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