Программа напечатает 5 и 12. Распаковка (int)obj копирует значение в num; последующее присваивание num не меняет объект, на который ссылается obj.
Боксинг и анбоксинг значений в C#
Программа напечатает 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. В данном коде тип совпадает, поэтому ошибки нет.