c# - 虚拟方法逻辑不工作 C# .NET 4.0

标签 c# methods virtual

我正在研究 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/

相关文章:

c# - 在 Entity Framework 中查找给定主键的对象

c++ - 如何为类变量实现虚函数覆盖

c++ - 在基类 vector 上调用虚函数

c# - 在 WPF DataGrid 中禁用选择

c# - IIS 部署的 ASP.NET Core 应用程序提供间歇性 431 请求 header 太长错误

java - return 语句有问题

java - Java 双重哈希问题

java - 我的 display() 未运行或未显示我的 println

.net-3.5 - FileUpload .net 控制并将文件保存到远程文件服务器上的虚拟文件夹

c# - Visual Studio 可以生成 C# 代码而不是 XAML 吗?