В девяти случаях из десяти вы должны создавать класс, а не структуру. Структуры и классы имеют очень разную семантику в C # по сравнению с тем, что вы можете найти в C ++ дляпример.Большинство программистов, которые используют структуру , должны использовать класс, что делает такие вопросы совершенно откровенно неуместными.
Вот несколько быстрых правил о том, когда следует выбирать структуру над классом:
- Никогда.
... О, ты еще читаешь?Вы настойчивыХорошо, хорошо. - Когда у вас есть явная потребность в семантике типа значения, в отличие от семантики ссылочного типа.
- Когда у вас очень маленький тип (Основное правило - это объем памяти, не превышающий 16 байт.)
- Когда объекты, представленные вашей структурой, будут недолговечными и неизменными (не изменится).
- И иногда, для целей взаимодействия с собственным кодом, который использует структуры.
Но если вы приняли информированное решение и действительно уверены, что вы делаете на самом деле нужна структура, а не класс, вам нужно вернуться к пункту 2 и понять, что такое семантика типов значений. Статья Джона Скита здесь должна пройти долгий путь к разъяснению различия.
После того, как вы это сделаете, вы должны понять, почему определение ссылочного типа внутри типа значения (структуры)не проблема.Типы ссылок похожи на указатели.Поле внутри структуры не хранит фактический тип;скорее он хранит указатель (или ссылку) на этот тип.Нет ничего противоречивого или неправильного в объявлении структуры с полем, содержащим ссылочный тип.Он не будет ни «замедлять объект», ни «вызывать GC», то есть две проблемы, которые вы выражаете в комментарии.