我正在学习 c#,最近遇到了一个示例练习。我希望这个问题对于任何具有布尔类型的语言都是相同的。该练习展示了一个代码出错(故意(的示例。这是有问题的方法:它很短,所以我发布它没有问题。
public void CalculateCostOfDecorations(bool fancy)
{
if (fancy)
{
CostOfDecorations = (NumberOfPeople * 15.00M) + 50M;
}
else
{
CostOfDecorations = (NumberOfPeople * 7.50M) + 30M;
}
}
这个练习的重点似乎是(如果我错了,请纠正我(如果布尔参数"花式"没有从其初始状态改变(通过按钮或其他(,那么无论变量"NumberOfPeople"如何变化,这是在方法内部,方法本身不会被调用。否则,如果 bool 参数 "fancy" 确实发生了变化,则调用该方法。
这是对的吗?我在网上看过,但没有找到合适的例子。
谢谢
也许我可以澄清我的问题。我问是否调用了"该方法",说错了话。我指的是该方法中的一个语句。
假设最初将布尔变量"fancy"设置为 true。然后假设该方法被调用并且"花式"没有从 true 更改(最初是(。如果不更改"花式",测试布尔值(花式(的"if"语句是否会输入?
谢谢汤姆
这个假设很接近,但并不完全正确。 我不知道还能怎么说,但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;
如果我正确理解你,如果我们用第一个参数 = true
调用CalculateCostOfDecorations
(例如。 CalculateCostOfDecorations(true)
执行将继续输入 if 语句,否则如果fancy
参数的值为 false,它将进入 else
子句。
没有看到练习的措辞,他们要求您考虑的是变量NumberOfPeople
。 根据您的问题,其起源尚不清楚。
我猜他们希望你考虑如何定义该变量的范围和分配(引用或其他(。 这都会影响计算结果。
正如其他人所说,只有在调用该方法时才能为 Fancy 赋值。