当一个类有多个构造函数的时候,常使用this构造器:
public class SomeClass
{
public SomeClass()
{
//TODO:初始化一些字段
}
public SomeClass(string temp) : this()
{
//TODO:初始化另外一些字段
}
}
在这里,为什么要使用this构造器呢?这事还要从字段的初始化说起。
假设有这样的一个类,在声明字段的时候对字段进行了初始化。在客户端,通过该类的2个构造函数创建对象实例。
class Program
{
static void Main(string[] args)
{
SomeClass sc = new SomeClass();
SomeClass sc1 = new SomeClass("jack");
}
}
public class SomeClass
{
private int _age = 20;
private string _name = "darren";
public SomeClass()
{
}
public SomeClass(string name)
{
_name = name;
}
}
可见,每次调用类的构造函数都会对_age和_name字段进行初始化。是否可以把这重复的部分放到一个公共的地方呢?答案是可以的,可以把字段的初始化工作交给一个无参构造函数。修改如下:
public class SomeClass
{
private int _age;
private string _name;
public SomeClass()
{
_age = 20;
_name = "darren";
}
public SomeClass(string name) : this()
{
_name = name;
}
}
以上,在SomeClass的有参构造函数中,没有对_age和_name字段再次进行初始化,而是调用了SomeClass的无参构造函数,可见,使用this构造器避免了重复初始化字段。