x имеет тип int; object y = x выполняет boxing. Строка int z = y не компилируется, поскольку обратное unboxing-преобразование требует явного приведения.
Подробный разбор кода
x имеет тип int; object y = x выполняет boxing. Строка int z = y не компилируется, поскольку обратное unboxing-преобразование требует явного приведения.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дайте детальное пояснение следующему фрагменту кода:
var x = 42;
object y = x;
int z = y;
Ответ
x имеет тип int; object y = x выполняет boxing. Строка int z = y не компилируется, поскольку обратное unboxing-преобразование требует явного приведения.
Исправление:
var x = 42;
object y = x;
int z = (int)y;
При упаковке в объект помещается копия значения 42. При распаковке тип должен соответствовать упакованному: (long)y не превратит упакованный int в long, а выбросит InvalidCastException. Для такого преобразования сначала распаковывают int: (long)(int)y. Упаковка не создаёт связь, которая меняла бы x при последующем изменении z.