私は本の例に取り組んでいますが、Pro C# and the .NET Platform
どこかで見えない間違いを犯しています。プログラムはコンパイルおよび実行されますがManager
、この例のオブジェクトでは、'StockOptions' の正しい値が返されません。簡潔にするために、関連するコードのみを投稿しようとします。この例はすべてクラス階層に関するものであり、6 つの異なるクラスがあるからです。クラスの仮想メソッド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);