C#从构造函数中调用其他构造函数

有时,在一个类中有几个构造函数,以容纳某些可选参数,这些构造函数包含一些共同的代码。例如,如下情况:

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版权协议,转载请附上原文出处链接和本声明。