C#9 был официально анонсирован пару дней назад, и одним из самых больших дополнений к языку является новый тип «запись», использующий ключевое слово data
. Эта новая функция очень похожа на структуры только для чтения C# 7.2, поэтому я не понимаю, почему можно использовать одну над другой. Конкретно:
- Зачем использовать
data struct
вместоreadonly struct
? Разве это не одно и то же? - Можно ли объявить
data readonly struct
? Не будет ли это излишним? - Зачем использовать
data class
вместоreadonly struct
? Они оба обеспечивают неизменность и равенство типов значений, так что это просто вопрос производительности (выделение кучи или копирование при передаче в качестве параметра)?
Бонусные баллы: мне не помешала бы помощь в понимании того, почему «записи изменяют значения по умолчанию того, что означает простое объявление члена...»? У меня было достаточно корпоративного кода, чтобы предвидеть гигантские классы данных с десятками членов, где неопытный программист увидит string FirstName;
и не подумает прокрутить вверх, чтобы найти ключевое слово data
, предполагая, что это частное поле, а не общедоступное свойство. !
data class
поддерживает наследование, аreadonly struct
- нет. Еслиdata class
es имеют аналогичное поведение производительности и размещаются в стеке, как структуры, но имеют наследование, то я хочу, чтобы они имели строго типизированные варианты структур (подумайте о векторах в разных системах отсчета). - person lamont   schedule 24.05.2020