我正在学习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”语句?
由于 汤姆
答案 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
。根据您的问题,其起源未知。
我猜他们想让你想一想这个变量的范围如何定义它的范围和分配(引用或其他)。哪一切都会影响计算结果。
正如其他人所说的那样,只有在调用方法时才能给它指定一个值。