在我的Form1中,我有以下整数:
public static int completed;
我的课程中有多个班级; Runner
是超类,如果您有Expert : Runner
,Beginner : Runner
和Disabled : Expert
我的表单上基本上有三个numericUpDown
框,供用户输入数字来表示时间(小时,分钟和秒)。还有一个名为lstRunners
的列表框,它使用对象数组填充,如下所示:
Runner[] runnerList;
runnerList = new Runner[10];
我有一个名为btnFinish
的按钮。我想要做的是在名为Expert
的{{1}}类中添加一个方法,如果所选的Expert或Disabled运行程序完成运行,我希望基本上将CountFinished24()
整数递增1在24:00:00或更低。这必须仅针对专家和残疾选手进行录制。我不确定我该怎么做呢?
答案 0 :(得分:2)
向Runner添加一个虚拟的OnFinished()方法,由btnFinish调用。为Expert和Disabled重写此方法,如果在24h内完成了比赛,则递增完成的整数
答案 1 :(得分: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关键字。它也有例子。在他们的第一个例子中,他们使用抽象类,但在第二个例子中,他们做了一些更类似于我在这里写的东西。