Ниже перечислены только пути, по которым классы отличаются от структур на С# (пожалуйста, поправьте меня, если я ошибаюсь):
- Переменные класса - это ссылки, а структурные переменные - значения, поэтому все значения struct копируются в назначениях и пропусках параметров
- Переменные класса - это указатели, хранящиеся в стеке, которые указывают на память в куче, тогда как структурные переменные хранятся в хранимой куче в качестве значений
Предположим, что у меня есть неизменяемая структура, то есть структура с полями, которые нельзя изменить после инициализации. Каждый раз, когда я передаю эту структуру в качестве параметра или использую в назначениях, значение будет скопировано и сохранено в стеке.
Тогда предположим, что я делаю эту неизменяемую структуру неизменяемым. Единственный экземпляр этого класса будет создан один раз, и только ссылка на класс будет скопирована в назначениях и проходах параметров.
Если объект был изменен, поведение в этих двух случаях было бы иным: когда кто-то изменил бы объект, в первом случае копия структуры будет изменена, а во втором случае исходный объект будет изменен, Однако в обоих случаях объект неизменен, поэтому нет никакой разницы, действительно ли это класс или структура для пользователя этого объекта.
Поскольку ссылка на копирование дешевле, чем копирование структуры, зачем использовать неизменяемую структуру?
Кроме того, поскольку изменчивые структуры являются злыми, похоже, что нет причин использовать структуры вообще.
Где я ошибаюсь?