2012-10-09 29 views
1

我正在通過書Pro C# and the .NET Platform中的示例工作,我在某處看不到我看不到的一個錯誤。該程序編譯並運行,但此示例中的Manager對象沒有返回正確的'StockOptions'值。爲了簡潔起見,我將嘗試僅發佈相關代碼,因爲這個例子全部是關於類層次結構的,並且有六個不同的類。 Manager類中的Employee類中的虛擬方法GiveBonus未被正確覆蓋。從我的Main()方法虛擬方法邏輯不工作C#.NET 4.0

Manager chucky = new Manager("chucky", 50, 92, 100000, "333-33-3333", 9000); 
chucky.GiveBonus(300); 
chucky.DisplayStats(); 
Console.WriteLine(); 

class Manager : Employee 
{ 
    private int numberOfOpts; 
    //the properties are inherited from Employee 

    public int StockOptions { get; set; } 

    //***METHODS*** this is returns the StockOptions amount as it is in the 
    // constructor, there's no logic being applied 
    public override void GiveBonus(float amount) 
    { 
     base.GiveBonus(amount); 
     Random r = new Random(); 
     numberOfOpts += r.Next(500);  
    } 

    public override void DisplayStats() 
    { 
     base.DisplayStats(); 
     Console.WriteLine("you have {0} stock options", StockOptions); 
    } 

    public Manager() { } 


    public Manager(string fullName, int age, int empID, float currPay, 
     string ssn, int numbofOpts) : base(fullName, age, empID, currPay, ssn) 

    { 
     ID = empID; 
     Age = age; 
     Name = fullName; 
     Pay = currPay; 
     StockOptions = numbofOpts; 
    } 
} 

片斷我犯了一個錯誤,而問的問題。我應該怎麼問就是爲什麼我要使用

Console.WriteLine("you have {0} stock options", numbOfOpts); 

代替

Console.WriteLine("you have {0} stock options", StockOptions); 

回答

4

這並不意味着一個隨機號碼添加到9000 - 它意味着給的股票期權一個隨機數以及「基地」工資獎金:

public override void GiveBonus(float amount) 
{ 
    base.GiveBonus(amount); 
    Random r = new Random(); 

    // Note numberOfOpts, not currPay 
    numberOfOpts += r.Next(500); 
} 

不幸的是,我們有兩個不同的領域 - 一個由一個自動實現的屬性創建 - 它贏得」 t 實際上更新了StockOptions的值......目前還不清楚這是由於您的編輯原因,還是因爲您在本書中有錯。 (有很多其他的東西我不喜歡這個代碼,但是嘿...)

+0

這實際上是在書:)。當我將'StockOptions'更改爲類中的字段時,'numberOfOpts'會返回一個隨機數。那麼在這樣的實現中,私人支持字段將不會被更新?你能不能解釋一下爲什麼你不喜歡這個代碼?我正在學習所有這些東西,這是從馬的嘴裏直接得來的。 – wootscootinboogie

+1

@wootscootinboogie:通過設置不同的字段,不會自動更改支持'StockOptions'的字段。噢親愛的。至於其他問題 - 名稱是可怕的,無參數構造函數似乎是一個壞主意,沒有驗證,我期望各種屬性由基礎構造函數設置(大多數情況下是不可變的)。如果上面的'GiveBonus'的評論也是逐字的,那沒有任何意義。 Ick,基本上。 –

+0

我編輯了這個問題以反映我應該問的問題。代碼是逐字的,但評論是我對神知道的可憐嘗試。 – wootscootinboogie