C#布尔方法,如果布尔值(参数)没有改变,将调用方法

本文关键字:方法 改变 调用 布尔 如果 布尔值 参数 | 更新日期: 2023-09-27 18:33:11

我正在学习 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"语句是否会输入?

谢谢汤姆

C#布尔方法,如果布尔值(参数)没有改变,将调用方法

这个假设很接近,但并不完全正确。 我不知道还能怎么说,但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 赋值。