【问题标题】:Virtual Method logic not working C# .NET 4.0虚拟方法逻辑不起作用 C# .NET 4.0
【发布时间】:2012-10-09 19:52:59
【问题描述】:

我正在研究书中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() 方法中的 sn-p

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);

【问题讨论】:

    标签: c# methods virtual


    【解决方案1】:

    这并不是要在 9000 上添加一个随机数 - 而是要给出一个随机数的股票期权以及“基本”奖金:

    public override void GiveBonus(float amount)
    {
        base.GiveBonus(amount);
        Random r = new Random();
    
        // Note numberOfOpts, not currPay
        numberOfOpts += r.Next(500);
    }
    

    不幸的是,由于我们有两个单独的字段 - 一个由自动实现的属性创建 - 它不会实际上更新 StockOptions 的值...不清楚这是否是由于您的编辑,或者是否是书中的错误。 (我不喜欢这段代码的其他很多方面,但是嘿......)

    【讨论】:

    • 其实书里有:)。当我将StockOptions 更改为类中的一个字段时,numberOfOpts 它返回一个随机数。那么私有支持字段将在这样的实现中更新never 吗?你能否也解释一下你为什么不喜欢这个代码?我只是在学习所有这些东西,这是直接从马的嘴里说出来的。
    • @wootscootinboogie:支持StockOptions 的字段肯定不会通过设置不同的字段而自动更改,不会。哦亲爱的。至于其他问题 - 名称很糟糕,无参数构造函数似乎是个坏主意,没有验证,我希望基本构造函数设置各种属性(并且在大多数情况下是不可变的)。如果GiveBonus 上面的评论也是逐字逐句的,那就没有意义了。 Ick,基本上。
    • 我编辑了这个问题以反映我应该问的问题。代码是逐字记录的,但评论是我可怜的天知道的尝试。
    猜你喜欢
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2013-05-13
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多