1

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

1 に答える 1

4

これは乱数を 9000 に追加することを意図したものではありません。これは、乱数のストック オプションと「ベース」ペイ ボーナスを与えることを意図しています。

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

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

残念ながら、2 つの別個のフィールド (1 つは自動的に実装されたプロパティによって作成されたもの) があるため、実際には値を更新しませStockOptionsん ... これが編集によるものなのか、本の間違いなのかは明らかではありません. (このコードの嫌いなところは他にもいろいろあるんですけどねぇ…)

于 2012-10-09T19:56:42.253 に答える