Чем ссылочные типы отличаются от значимых в C# и что такое упаковка?
Как отвечать ▾Скрыть подсказку ▴
Как отвечать: Объясните стек и кучу, семантику копирования, boxing/unboxing для структур и почему это важно для производительности в горячих участках кода.
Пример сильного ответа
Значимые типы — это структуры: значение хранится прямо в переменной или внутри объекта, при присваивании копируется целиком, и по умолчанию это не ссылка на общий объект. Ссылочные типы живут в управляемой куче, переменная держит ссылку, а копирование передаёт только ссылку. Упаковка — это приведение значимого типа к object или к интерфейсу: среда создаёт объект в куче и копирует туда значение, а распаковка возвращает копию обратно. Это лишние аллокации и давление на сборщик мусора, поэтому в горячем коде я держу generic-коллекции и избегаю object. На обработке 500 000 записей переход с ArrayList на List<int> снизил потребление памяти примерно на треть.
- Показана модель памяти, а не заученное определение
- Упаковка объяснена через последствия для производительности
- Есть личный пример с измеримым результатом
Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.