Что выведет код после boxing int в object, инкремента i и попытки привести obj к short?
C# / .NET
Основы языка
Junior
Что это: При boxing создаётся копия значения int в куче, поэтому ++i не меняет obj. Unboxing требует точного совпадения типа: приведение boxed int к short выбрасывает InvalidCastException.
Почему важно: Проверяет понимание независимости boxed-копии от исходной переменной и правил безопасного unboxing.
Под капотом: Boxing аллоцирует объект с MethodTable для System.Int32 и копирует биты значения. Unboxing проверяет тип в объекте и копирует данные обратно на стек; несовпадение типов ловится до копирования.
Типичная ошибка: Думать, что object obj отслеживает текущее значение i, или что можно unbox в любой числовой тип без явного приведения после unboxing к int.
int i = 1;
object obj = i; // boxing
++i;
Console.WriteLine(i); // 2
Console.WriteLine(obj); // 1
Console.WriteLine((short)obj); // InvalidCastException