Программа выведет 1 2 2 3. Структуры копируются при присваивании, упаковке и явной распаковке; Inc меняет именно тот экземпляр, на котором вызван.
Как изменяются поля структуры при инкременте, присваивании и упаковке
Программа выведет 1 2 2 3. Структуры копируются при присваивании, упаковке и явной распаковке; Inc меняет именно тот экземпляр, на котором вызван.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какой текст появится в консоль после выполнения метода DoStuff().
struct S
{
public int X;
public S Inc()
{
X++; return this;
}
public static void DoStuff()
{
var a = new S();
var b = a.Inc();
object c = b.Inc();
object d = ((S)c).Inc();
Console.WriteLine($"{a.X} {b.X} {((S)c).X} {((S)d).X}");
}
}
Ответ
Программа выведет 1 2 2 3. Структуры копируются при присваивании, упаковке и явной распаковке; Inc меняет именно тот экземпляр, на котором вызван.
a.Inc увеличивает a.X до 1 и возвращает копию в b. Затем b.Inc меняет b.X на 2, а возвращённая структура упаковывается в c.
Выражение (S)c создаёт распакованную копию со значением 2. Inc увеличивает эту временную копию до 3, и результат снова упаковывается — теперь в d. Сам упакованный объект c при этом не изменяется. Поэтому a = 1, b = 2, c = 2, d = 3.