ПРИМЕЧАНИЕ: я работаю в .NET 3.5 здесь.
Допустим, у меня есть примеры базовых / дочерних классов со следующими конструкторами:
public Person(string name, int age, string job, bool isMale)
{
Name = name;
Age = age;
Job = job;
IsMale = isMale;
}
public CollegeStudent(string name) : this(name, 18) {}
public CollegeStudent(string name, int age) : this(name, age, "Student") {}
public CollegeStudent(string name, int age, string job) : this(name, age, job, true) {}
public CollegeStudent(string name, int age, string job, bool isMale) : base(name, age, job, isMale) {}
Достаточно ли умен компилятор, чтобывидите, что единственное, что делают дочерние конструкторы - это связывание друг с другом и, в конечном счете, просто вызов базового конструктора?Таким образом, он мог бы просто изменить инициализаторы этого конструктора так, чтобы он вызывал базовый конструктор непосредственно во время компиляции?
Таким образом, он по сути изменил бы все на это:
public CollegeStudent(string name) : base(name, 18, "Student", true) {}
public CollegeStudent(string name, int age) : base(name, age, "Student", true) {}
public CollegeStudent(string name, int age, string job) : base(name, age, job, true) {}
public CollegeStudent(string name, int age, string job, bool isMale) : base(name, age, job, isMale) {}
IЯ хотел бы написать мои конструкторы аналогично первому разделу, поскольку это удобно, но я могу просто вызвать базовый конструктор напрямую для каждого конструктора, если я просто собираюсь нести бесполезные накладные расходы.