我正在研究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);
答案 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
的值...目前尚不清楚这是由于你的编辑,或者是否是书中的错误。 (关于这段代码我还有其他各种不喜欢的东西,但是嘿......)