我正在研究 Pro C# and the .NET Platform
一书中的示例,但我在某个地方犯了一个我看不到的错误。程序编译并运行,但此示例中的 Manager
对象没有返回正确的“StockOptions”值。为了简洁起见,我将尝试只发布相关代码,因为这个示例都是关于类层次结构的,并且有六个不同的类。 Employee
类中的虚方法 GiveBonus
未在 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);
最佳答案
这并不是要给 9000 添加一个随机数 - 它是要提供一个随机数的股票期权以及“基本”奖金:
public override void GiveBonus(float amount)
{
base.GiveBonus(amount);
Random r = new Random();
// Note numberOfOpts, not currPay
numberOfOpts += r.Next(500);
}
不幸的是,因为我们有两个单独的字段 - 一个由自动实现的属性创建 - 它不会实际上更新 StockOptions
的值......它是不清楚这是由于您的编辑造成的,还是书中的错误。 (我不喜欢此代码的其他各种地方,但是嘿...)
关于c# - 虚拟方法逻辑不工作 C# .NET 4.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12807437/