Разбор поведения программы

Будет выведено 3: после first = second обе переменные ссылаются на один объект, а последующее присваивание first нового объекта не меняет second.

Короткий ответ

Что ответить на собеседовании

Будет выведено 3: после first = second обе переменные ссылаются на один объект, а последующее присваивание first нового объекта не меняет second.

Подробный разбор

Ответ с пояснениями

Условие

Какой вывод будет получен после выполнения приведённого кода?

public class BC
    {
        public int A {get;set;}
    }
var first = new BC() {A = 5};
var second = new BC() {A = 8};
    
first = second;
first.A = 3;
first = new BC() {A = 10};
Console.WriteLine(second.A); 

Ответ

Будет выведено 3: после first = second обе переменные ссылаются на один объект, а последующее присваивание first нового объекта не меняет second.

first.A = 3 изменяет объект, который изначально имел A = 8 и на который продолжает ссылаться second. Следующая строка создаёт другой объект с A = 10 и записывает его ссылку только в first.

Если использовать top-level statements, объявление класса BC необходимо разместить после исполняемых операторов. Либо перенести операторы в Main: в исходном расположении класс перед top-level кодом вызывает ошибку компиляции. При корректном размещении результат именно 3.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее