Классы и объекты

Последнее обновление: 03.08.2018
Вопрос 1

Дан следующий класс:

class Person
{
	public string name = "Sam";
	public int age;

	public Person(string name, int age)
	{
		this.name = name;
		this.age = age;
	}
}

Какое значение поле name будет иметь при выполнение следующего кода и почему?

Person tom = new Person("Tom", 34) { name = "Bob", age = 29 };

Поле name объекта tom будет иметь значение "Bob". В самом начале выполняется начальная инициализация полей класса, и полю name присваивается значение "Sam". Далее выполняется конструктор, который устанавливает для переменной name значение "Tom". И в последнюю очередь выполняется инициализатор, который устанавливает для поля name значение "Bob".

Вопрос 2

Дан следующий класс:

class Person
{
	public string name = "Ben";
	public int age = 18;
	public string email = "ben@gmail.com";

	public Person(string name)
	{
		this.name = name;
	}
	public Person(string name, int age) : this(name)
	{
		this.age = age;
	}
	public Person(string name, int age, string email) : this("Bob", age)
	{
		this.email = email;
	}
}

Какое значения будут иметь поля name, age и email после выполнения следующего кода и почему? В каком порядке будут вызываться конструкторы класса Person?

Person person = new Person("Tom", 31, "tom@gmail.com");

Значения полей:

  • name: Bob

  • age: 31

  • email: tom@gmail.com

Порядок выполнения конструкторов:

  1. Вначале вызывается конструктор с тремя параметрами: Person(string name, int age, string email). Он вызывает конструктор с двумя параметрами Person(string name, int age). Этому конструктору передаются значения name: "Bob", age: 31

  2. Далее вызывается конструктор с двумя параметрами: Person(string name, int age). Он вызывает конструктор с одним параметром Person(string name). Этому конструктору передаются значения name: "Bob"

  3. Далее вызывается конструктор с одним параметром: Person(string name). Он получает строку "Bob" и устанавливает ее в качестве значения для поля name

  4. Затем выполняется конструктор с двумя параметрами: Person(string name, int age). Он устанавливает число 31 в качестве значения для поля age

  5. Далее выполняется конструктор с тремя параметрами: Person(string name, int age, string email). Он устанавливает строку "tom@gmail.com" в качестве значения для поля email

Дополнительные материалы
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850