虚拟方法逻辑不工作C#.NET 4.0
我正在阅读《代码》一书中的一个例子和.NET平台,我犯了一个我看不见的错误。程序编译并运行,但本例中的虚拟方法逻辑不工作C#.NET 4.0,c#,methods,virtual,C#,Methods,Virtual,我正在阅读《代码》一书中的一个例子和.NET平台,我犯了一个我看不见的错误。程序编译并运行,但本例中的Manager对象没有返回正确的'StockOptions'值。为了简洁起见,我将尝试只发布相关代码,因为这个示例都是关于类层次结构的,并且有六个不同的类。Employee类中的虚拟方法GiveBonus未在Manager类中正确重写 class Manager : Employee { private int numberOfOpts; //the properties are
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;
}
}
my Main()方法的代码段
我问这个问题时犯了一个错误。我应该问的是为什么我必须使用
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
的值。。。现在还不清楚这是由于你的编辑,还是书中的错误。(这个代码还有很多其他我不喜欢的地方,但是嘿…)它不是要给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
返回一个随机数。那么,在这样的实现中,私有支持字段将永远不会更新?你能解释一下你为什么不喜欢这个代码吗?我只是在学习所有这些东西,这是直接从马口中学来的。@wootscootinboogie:backingStockOptions
的字段肯定不会通过设置不同的字段自动更改,不。哦,亲爱的。至于其他问题-名称很糟糕,无参数构造函数似乎是个坏主意,没有验证,我希望各种属性由基本构造函数设置(大多数情况下是不可变的)。如果上面的评论也是逐字逐句的,那就没有意义了。嗯,基本上。我编辑这个问题是为了反映我应该问的问题。代码是逐字逐句的,但注释是我可怜的尝试,上帝知道是什么。它实际上在书中:)。当我将StockOptions
更改为类中的字段时,numberOfOpts
返回一个随机数。那么,在这样的实现中,私有支持字段将永远不会更新?你能解释一下你为什么不喜欢这个代码吗?我只是在学习所有这些东西,这是直接从马口中学来的。@wootscootinboogie:backingStockOptions
的字段肯定不会通过设置不同的字段自动更改,不。哦,亲爱的。至于其他问题-名称很糟糕,无参数构造函数似乎是个坏主意,没有验证,我希望各种属性由基本构造函数设置(大多数情况下是不可变的)。如果上面的评论也是逐字逐句的,那就没有意义了。嗯,基本上。我编辑这个问题是为了反映我应该问的问题。代码是逐字逐句的,但注释是我可怜的尝试,上帝知道是什么。