c#bool方法,如果boolean(argument)没有改变,会调用方法吗?

时间:2016-02-04 18:16:12

标签: c# asp.net

我正在学习c#并且最近遇到了一个示例练习。我希望这个问题对于任何具有布尔类型的语言都是一样的。该练习显示了错误(有意)完成的代码示例。这是有问题的方法:它很短,所以发布它没有问题。

 public void CalculateCostOfDecorations(bool fancy)
  {
    if (fancy)
     {
         CostOfDecorations = (NumberOfPeople * 15.00M) + 50M;
     }
     else
     {
         CostOfDecorations = (NumberOfPeople * 7.50M) + 30M;
     }
    }

这个练习的重点似乎是(并且如果我错了,请纠正我)如果bool参数“fancy”,没有从其初始状态(通过按钮推或其他)改变,那么无论变量如何“NumberOfPeople”更改,这是在方法内部,方法本身不被调用。否则,如果bool参数“fancy”确实改变,则调用该方法。

这是对的吗?我在网上看过但没找到合适的例子。

谢谢

也许我可以澄清我的问题。我错过了询问是否“调用该方法”。我指的是方法中的一个陈述。

让我们说最初bool变量“fancy”设置为true。然后让我们说该方法被调用,并且“fancy”不会从true更改(最初是这样)。如果“fancy”没有改变,是否会输入测试布尔值(fancy)的“if”语句?

由于 汤姆

3 个答案:

答案 0 :(得分:3)

这个假设很接近,但并不完全正确。我不知道怎么说这个,但CalculateCostOfDecorations只有在被调用时才被调用。提供fancy的值的更改不会触发此方法的调用;需要有一个显式调用,绑定或其他隐式操作,导致CalculateCostOfDecorations被调用。

在调用此方法并开始执行之前,引用fancy本身不存在,然后仅在此方法的本地范围内。

如果您希望CostOfDecorations始终"总是"无需调用方法即可正确更新,_fancy也是一个成员字段(在您的示例中未显示),您可以通过将其设置为只读属性来执行此操作:

private bool _fancy;
// ...
public Decimal CostOfDecorations { 
    get { return _fancy ? NumberOfPeople * 15.0 + 50.0 
                        : NumberOfPeople * 7.5 + 30.0; }  
}

或者,在C#5中:

public Decimal CostOfDecorations => _fancy ? NumberOfPeople * 15.0 + 50.0 : NumberOfPeople * 7.5 + 30.0;

答案 1 :(得分:0)

如果我正确地理解你,如果我们用第一个参数= CalculateCostOfDecorations调用true(例如CalculateCostOfDecorations(true),执行将继续输入if语句,否则如果{{1} 1}}参数的值为false,它将进入fancy子句。

答案 2 :(得分:0)

我要走出困境并说出没有看到演习是如何措辞的,他们要求你思考的是变量NumberOfPeople。根据您的问题,其起源未知。

我猜他们想让你想一想这个变量的范围如何定义它的范围和分配(引用或其他)。哪一切都会影响计算结果。

正如其他人所说的那样,只有在调用方法时才能给它指定一个值。