0

在我的 Form1 中,我有以下整数:

public static int completed;

我的程序中有多个课程;Runner是超类,如果你愿意的话Expert : RunnerBeginner : Runner并且Disabled : Expert

我的表单上基本上有三个numericUpDown框供用户输入数字来表示时间(小时、分钟和秒)。还有一个名为的列表框lstRunners,它使用对象数组填充,如下所示:

Runner[] runnerList;
runnerList = new Runner[10];

我有一个名为 的按钮btnFinish。我想要做的是在Expert名为的类中添加一个方法,如果选定的专家或禁用跑步者在 24:00:00 或更短时间内完成了跑步CountFinished24(),我想基本上将整数增加 1。completed这必须只为专家和残疾跑步者记录。我不确定我该怎么做?

4

2 回答 2

2

向 Runner 添加一个由 btnFinish 调用的虚拟 OnFinished() 方法。为 Expert 和 Disabled 覆盖此方法,如果他们在 24 小时内完成比赛,则增加完成的整数

于 2013-11-06T17:32:07.143 回答
0

只是详细说明 Weyland 的答案,您的 Runner 课程中可能会有这样的内容:

 protected virtual int OnFinish(int h, int m, int s) 
 { 
      return 0;
 }

然后在 ExpertRunner / DisabledRunner 中,您只需添加 ovverride 关键字即可覆盖 OnFinish:

 protected override int OnFinish(int h, int m, int s)
 { 
      //IF the total time is less than 24:00:00
           return 1;
      else
           return 0;
 }

然后在你的表格上...

 private void btnFinish_Click(object sender, EventArgs e)
 {
      completed += myExpertRunner.OnFinish(numericHour, numericMinute, numericSecond);
 }

您可能希望使用某种自定义对象(或 DateTime)以更易于使用的方式存储 H:M:S。但无论如何...

本质上,override允许您使用一种方法,该方法采用相同的参数并使用相同的名称但行为不同。

一个超级常见的例子是ToString()属于所有对象的方法。当您调用此方法时,它可能只是将对象类型作为字符串返回。其他对象覆盖此 ToString() 方法并返回不同的内容。例如,StringBuilder 类的 ToString 方法返回一个字符串,其中包含每个“元素”。

阅读 MSDN 上的override关键字。它也有例子。在他们的第一个示例中,他们使用了一个抽象类,但在第二个示例中,他们所做的事情与我在这里所写的更相似。

于 2013-11-06T20:30:49.917 回答