Выбор ответа Junior Типы значений и ссылочные спрашивают часто обновлено
Переприсваивание параметра-класса
Вопрос
Что выведет код?
class Person { public string Name; public Person(string n) => Name = n; }
static void Rename(Person p) { p = new Person("Борис"); }
var person = new Person("Анна");
Rename(person);
Console.WriteLine(person.Name);
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Анна. Ссылка на объект передаётся по значению: метод получает копию ссылки. p = new Person(...) меняет только локальную копию, исходная переменная по-прежнему указывает на объект с именем Анна.
Варианты ответа
БорисАннаправильный ответnull- Ошибка компиляции
Разбор
Ссылка на объект передаётся по значению: метод получает копию ссылки. p = new Person(...) меняет только локальную копию, исходная переменная по-прежнему указывает на объект с именем Анна. Если бы метод сделал p.Name = "Борис", изменился бы общий объект. Чтобы заменить сам объект у вызывающего, нужен ref Person p.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Когда происходит упаковка
Следующий вопрос
default и конструктор структуры без параметров