Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 构造函数调用静态类成员的增量是静态类成员的两倍_C#_Constructor_Static - Fatal编程技术网

C# 构造函数调用静态类成员的增量是静态类成员的两倍

C# 构造函数调用静态类成员的增量是静态类成员的两倍,c#,constructor,static,C#,Constructor,Static,使用构造函数的C#特征很方便,但在这种情况下,它会影响最终结果 class Car{ protected static int numCar; public string Owner{get; private set;} static Car() { // CRL will set it at the first Car object allocation Car.numAuto = 0; } public Car():this("No

使用构造函数的C#特征很方便,但在这种情况下,它会影响最终结果

class Car{

    protected static int numCar;
    public string Owner{get; private set;}

    static Car() { // CRL will set it at the first Car object allocation
        Car.numAuto = 0;
    }
    public Car():this("No One") {
        Car.numCar ++;
    }

    public Car(string owner)
    {
        Car.numCar ++;
        this.Owner=owner;
    }
    ...
    //other methods
    ...

}
然后,在Main()中,我使用默认构造函数声明并分配我的第一个Car对象。。。此操作将静态Car.numCar成员的增量增加两倍:

Car c= new Car();
Console.Write(car.numCar), // 2
我的问题是:如何保留两个构造函数并避免这种行为?我的目标是保留它们,但使用最后一条指令在控制台上获取值“1”。
谢谢

从第二个构造函数中取出
Car.numCar++
。它将始终调用第三个函数,为您提供所需的结果。

那么,当您知道在字符串构造函数中也会这样做时,为什么还要在void构造函数中增加numCar呢?这似乎是类上的错误。请从非静态构造函数之一中删除Car.numCar++或者这样做,因为有时这是可能的。更具体而言,考虑(在现实生活中)生产汽车,但没有人买它:它没有主人。