调用另一个函数时触发一个函数

时间:2012-02-05 08:56:12

标签: c#

public void ScoreFirstBall(int pinsKnockedDown) {
  if (IsStrike(Frame, pinsKnockedDown)) {
    Score = "X";
    ScoreMessage = "Good Job";
  } else if (IsGutterBall(pinsKnockedDown)) {
    Score = "0";
    ScoreMessage = "You'll do better next time";
  }
  PinsTotal += pinsKnockedDown;
}

public void ScoreSecondBall(int pinsKnockedDown) {
  PinsTotal += pinsKnockedDown;
}

问题:

  1. 在这种情况下,我希望每次PinsTotal += pinsKnockedDownScoreSecondBall(...)运行时都会调用ScoreFirstBall(...)。所以我想把它放在一个函数中(将来可能扩展到很多行)。

  2. 这样做有效吗?因为我们有一个线程可以在调用函数时进行监听。

  3. 感谢您阅读我的问题,如果不清楚,只需评论,我会解决它:)

2 个答案:

答案 0 :(得分:1)

根据我对您的问题的理解,是的,您可以将代码PinsTotal += pinsKnockedDown放在自己的方法中。当调用一个多个地方共有的代码或逻辑时,这是常见的做法。如果要更改逻辑,它还允许更容易维护逻辑,因为调用它的代码将保持不变(假设更改是方法的内部)。

答案 1 :(得分:1)

您可以重构该代码,只使用一个带有附加参数的ScoreBall()函数:

public void ScoreBall(int pinsKnockedDown, bool first)
{
    if (first) {
        if (IsStrike(Frame, pinsKnockedDown)) {
            Score = "X";
            ScoreMessage = "Good Job";
        } else if (IsGutterBall(pinsKnockedDown)) {
            Score = "0";
            ScoreMessage = "You'll do better next time";
        }
    }
    PinsTotal += pinsKnockedDown;
}

然后直接调用它,或者,如果你想保留现有的函数,让它们委托给公共实现:

public void ScoreFirstBall(int pinsKnockedDown)
{
    ScoreBall(pinsKnockedDown, true);
}

public void ScoreSecondBall(int pinsKnockedDown)
{
    ScoreBall(pinsKnockedDown, false);
}

这样,您不必担心将PinsTotal的增量放入其自己的函数中。

至于效率,函数调用确实有成本,但与代码中可能存在的其他瓶颈相比,它通常可以忽略不计。