2014-01-15 133 views
0

使用調用構造函數的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.numCar成員:

Car c= new Car(); 
Console.Write(car.numCar), // 2 

我的問題是:如何保持兩個構造函數並避免這種行爲?我的目標是保持它們全部,但使用在控制檯上獲取的最後一條指令的值'1'。 謝謝

+0

那麼當你知道這也是在字符串構造函數中完成時,爲什麼你還要在void構造函數中增加numCar?這似乎是你班上的錯誤。 – Steve

+0

從非靜態構造函數 –

+0

中刪除Car.numCar ++我這樣做是因爲有時它是可能的。更具體地說,考慮(在現實生活中)生產一輛汽車,但沒有人購買它:它沒有車主。 – atomicBee

回答

2

從第二個構造函數中取出Car.numCar++。它會一直叫第三個給你你想要的結果。

相關問題