0

私の Form1 には、次の整数があります。

public static int completed;

プログラムに複数のクラスがあります。あなたがRunnerそうするならスーパークラスExpert : RunnerですBeginner : RunnerDisabled : Expert

基本的numericUpDownに、ユーザーが時間を表す数値 (時間、分、秒) を入力するためのフォームに 3 つのボックスがあります。lstRunners次のように、オブジェクトの配列を使用して入力されるというリストボックスもあります。

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

というボタンがありますbtnFinish。私がやろうとしているのは、選択したエキスパートまたは無効なランナーが 24:00:00 以下で実行を完了した場合、基本的に整数を 1 増やしたいというExpertクラスにメソッドを追加することです。これは、エキスパートと障害者のランナーについてのみ記録する必要があります。どうすればこれを行うことができるかわかりませんか?CountFinished24()completed

4

2 に答える 2

0

ウェイランドの答えを詳しく説明すると、ランナークラスに次のようなものがあるかもしれません:

 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のオーバーライドキーワードを読んでください。実例もあります。最初の例では抽象クラスを使用していますが、2 番目の例では、私がここで書いたことに似た処理を行っています。

于 2013-11-06T20:30:49.917 に答える