2012-02-05 58 views
0
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 += pinsKnockedDown被称为每次ScoreSecondBall(...)ScoreFirstBall(...)运行。所以我想把它放在一个函数中(将来可能扩展到很多行)。

  2. 这样做效率高吗?因为我们有一个线程来监听函数的调用。

感谢您阅读我的问题,如果现在还不清楚,只是评论,我会解决它:)

+0

你的第二个问题是什么意思? – 2012-02-05 09:02:30

回答

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的增量到它自己的功能。

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

+1

谢谢,你的回答直接回答我的问题:) – nXqd 2012-02-05 09:15:33

1

我从你的问题的理解,是的,你可以把代码PinsTotal += pinsKnockedDown在它自己的方法。调用一段代码或多于一个地方共有的逻辑时,这是很常见的做法。它还允许更改逻辑的易维护性,因为调用它的代码将保持不变(假定更改在方法内部)。

相关问题