Будет выведено 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.