Дан следующий класс:
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".
Дан следующий класс:
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
Порядок выполнения конструкторов:
Вначале вызывается конструктор с тремя параметрами: Person(string name, int age, string email)
. Он вызывает конструктор с двумя параметрами
Person(string name, int age)
. Этому конструктору передаются значения name: "Bob", age: 31
Далее вызывается конструктор с двумя параметрами: Person(string name, int age)
. Он вызывает конструктор с одним параметром
Person(string name)
. Этому конструктору передаются значения name: "Bob"
Далее вызывается конструктор с одним параметром: Person(string name)
. Он получает строку "Bob" и устанавливает ее в качестве значения для поля name
Затем выполняется конструктор с двумя параметрами: Person(string name, int age)
. Он устанавливает число 31 в качестве значения для поля age
Далее выполняется конструктор с тремя параметрами: Person(string name, int age, string email)
. Он устанавливает строку "tom@gmail.com"
в качестве значения для поля email