注意:我这里使用的是.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) {}
编译器是否足够聪明,能够看到子构造函数所做的唯一事情就是彼此链接并最终调用基础构造函数?因此,它可以在编译时直接将"this"构造函数初始化程序更改为直接调用基础构造函数?
因此,在底层,所有内容都将被更改为以下内容:
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) {}
我希望我的构造函数能够像第一部分那样方便地编写,但是如果我只是要产生无用的开销,我可能会直接为每个构造函数调用基础构造函数。