虚拟方法逻辑无法正常工作C#.NET 4.0

时间:2012-10-09 19:52:59

标签: c# methods virtual

我正在研究Pro C# and the .NET Platform一书中的一个例子,我在一个我看不到的地方犯了一个错误。程序编译并运行,但此示例中的Manager对象没有返回正确的'StockOptions'值。为了简洁起见,我将尝试仅发布相关代码,因为这个示例是关于类层次结构的,并且有六个不同的类。 GiveBonus类中的虚拟方法Employee未在Manager类中正确覆盖。

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;
    }
}
来自我的Main()方法的

片段

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

在提问时我犯了一个错误。我应该问的是为什么我必须使用

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

而不是

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

1 个答案:

答案 0 :(得分:4)

这并不意味着将随机数添加到9000 - 这意味着提供随机数量的股票期权以及“基本”工资奖金:

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

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

不幸的是,由于我们有两个单独的字段 - 一个由自动实现的属性创建 - 它不会实际更新StockOptions的值...目前尚不清楚这是由于你的编辑,或者是否是书中的错误。 (关于这段代码我还有其他各种不喜欢的东西,但是嘿......)