Українська
Підсумки
Висновки
Структури є типами-значеннями: присвоєння копіює всі поля, тому вони підходять для невеликих незмінних значень, а readonly struct запобігає помилкам зі зміною копій. Приведення структури до object чи інтерфейсу виконує упакування. Записи генерують рівність значень, ToString, копіювання виразом with і деконструкцію; record class – посилальний тип, record struct – тип-значення. Перелічення замінюють «магічні числа» іменованими константами, а [Flags] дозволяє зберігати набори значень у бітах; разом із виразом switch вони реалізують скінченні автомати. Кортежі групують кілька значень без оголошення типу й зручні для повернення кількох результатів з методу; деконструкція та позиційні шаблони спрощують роботу з ними.
Питання для самоперевірки
- Чим структура відрізняється від класу?
- Що відбувається під час присвоєння змінної структури?
- Які значення мають поля
defaultструктури? Чи викликається конструктор? - Коли слід обирати структуру замість класу?
- Що таке
readonly struct? Чому змінні структури небезпечні? - Що таке упакування й розпакування? Коли воно відбувається для структур?
- Які члени компілятор генерує для запису?
- Як працює рівність записів?
- Для чого призначений вираз
with? - Чим
record structвідрізняється відreadonly record struct? - Який базовий тип і які значення мають константи перелічення за замовчуванням?
- Як безпечно розібрати рядок у значення перелічення?
- Як оголосити й використовувати перелічення-прапорці?
- Що таке кортеж? Як дати імена його елементам?
- Що таке деконструкція? Як реалізувати її для власного класу?
- Що таке позиційний шаблон і шаблон властивостей?
Корисні посилання
- Структури: https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/struct
- Записи: https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/record
- Перелічення: https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/enum
- Кортежі: https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/value-tuples
- Деконструкція: https://learn.microsoft.com/dotnet/csharp/fundamentals/functional/deconstruct
- Вибір між класом і структурою: https://learn.microsoft.com/dotnet/standard/design-guidelines/choosing-between-class-and-struct