Что выведет код Middle Типы значений и ссылочные спрашивают часто обновлено
Изменение упакованной структуры
Вопрос
Что выведет программа (.NET 8)? По строке на каждый вывод.
object boxed = 10;
int x = (int)boxed;
x++;
Console.WriteLine(boxed);
Console.WriteLine(x);
var p = new P { V = 1 };
object o = p;
p.V = 2;
Console.WriteLine(((P)o).V);
struct P { public int V; }
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 10, 11, 1. Распаковка (int)boxed копирует значение в x, инкремент не трогает объект: 10, затем 11.
Что выведет
10
11
1
Разбор
Распаковка (int)boxed копирует значение в x, инкремент не трогает объект: 10, затем 11. При упаковке object o = p в кучу кладётся копия структуры, поэтому последующее p.V = 2 на неё не влияет: печатается 1.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Типы значений и ссылочные»
- Что такое boxing и unboxing
- Сравнение двух упакованных чисел через ==
- Когда происходит упаковка
- Переприсваивание параметра-класса
- default и конструктор структуры без параметров
- Число различных точек
- Сумма int с переполнением, как в unchecked
- Среднее с пропусками (int?)