Боксинг и анбоксинг значений в C#

Программа напечатает 5 и 12. Распаковка (int)obj копирует значение в num; последующее присваивание num не меняет объект, на который ссылается obj.

Короткий ответ

Что ответить на собеседовании

Программа напечатает 5 и 12. Распаковка (int)obj копирует значение в num; последующее присваивание num не меняет объект, на который ссылается obj.

Подробный разбор

Ответ с пояснениями

Условие

В функции Example2 происходит следующее:

  • Создаётся объект obj, в который упаковывается целочисленное значение 5.
  • Затем из obj извлекается (распаковывается) значение и сохраняется в переменную num типа int.
  • Переменной num присваивается новое значение 12.
  • После этого в консоль выводятся содержимое obj и текущий результат в num.

Вопрос: какие именно данные будут напечатаны и каково их объяснение?

static void Example2()
{
    object obj = 5;
    int num = (int)obj;
    num = 12;

    Console.WriteLine(obj);
    Console.WriteLine(num);
}

Ответ

Программа напечатает 5 и 12. Распаковка (int)obj копирует значение в num; последующее присваивание num не меняет объект, на который ссылается obj.

Boxed int внутри obj сохраняет исходную пятёрку. Локальная num после распаковки независима и становится равной 12.

Обычный unboxing требует соответствующего упакованному значению типа: прямое извлечение как short, например, не является числовым преобразованием и вызвало бы InvalidCastException. В данном коде тип совпадает, поэтому ошибки нет.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее