Дубликат: Когда использовать struct в С#?
Есть ли практические причины использовать структуры вместо некоторых классов в Microsoft.NET 2.0/3.5?
"В чем разница между структурами и классами?" - это, наверное, самый популярный вопрос в intrviews для вакансий разработчика .NET. Единственный ответ, который, по мнению интервьюера, является правильным, - "структуры распределяются по стеклу, а классы распределяются по куче", и никаких дополнительных вопросов об этом не задано.
Некоторые поисковые запросы Google показали, что:
a) структуры имеют множество ограничений и дополнительных возможностей по сравнению с классами и
b) (и как таковой структуры) может быть быстрее на очень специализированных условиях, включая:
- размер блока данных меньше, чем 16 байт
- нет обширного бокса/распаковкиЭлементы структуры
- почти неизменяемы.
- весь набор данных невелик (в противном случае мы получаем переполнение стека)
(пожалуйста, исправьте/добавьте в этот список, если он неверен или не заполнен)
Насколько мне известно, наиболее типичные коммерческие проекты (ERM, accouting, решения для банков и т.д.) не определяют даже одну структуру, все пользовательские типы данных определяются как классы. Что-то не так или, по крайней мере, несовершенно в этом подходе?
ПРИМЕЧАНИЕ: вопрос о бизнес-приложениях, запущенных на заводе, не перечисляет "необычные" случаи, такие как разработка игр, анимация в реальном времени, обратная совместимость (COM/Interop), неуправляемый код и т.д. эти ответы уже по такому же вопросу: