Что выведет код 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 ошибок.

Термины по теме