有时,在一个类中有几个构造函数,以容纳某些可选参数,这些构造函数包含一些共同的代码。例如,如下情况:
Class Car
{
private string _description;
private int _nWheels;
public Car(string description,unit nWheels)
{
_description = description;
_nWheels = nWheels;
}
public Car(string description)
{
_description = description;
_nWheels = 4;
}
//etc.
}
这两个构造函数初始化相同的字段,显然,最好把所有的代码放在一个地方。C#有一个特殊的语法,称为构造函数初始化器,可以实现此目的:
Class Car
{
private string _description;
private int _nWheels
public Car(string description , int nWheels)
{
_description = description;
_nWheels = nWheels;
}
public Car(string description) : this(description ,4)
{
}
//etc.
}
这里,this关键字,仅调用参数最匹配的那个构造函数。注意,构造函数初始化器在构造函数的函数体之前执行。现在假定运行下面的代码:
var myCar = new Car("Proton Person");
在本例中,在带一个参数的构造函数的函数体执行之前,先执行带两个参数的构造函数(但是在本例中,因为再带一个参数的构造函数的函数体中没有代码,所以没有区别)。
C#构造函数初始化器可以包含对同一个类的另一个构造函数的调用(使用前面介绍的语法),也可以包含对直接基类的构造函数的调用(使用相同的语法,但是应使用base 关键字代替 this)。初始化器中不能有多个调用。
版权声明:本文为xuchen_wang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。