gpt4 book ai didi

c# - 为什么我可以在其他事件中使用这个变量

转载 作者:太空宇宙 更新时间:2023-11-03 20:53:23 28 4
gpt4 key购买 nike

我有一个关于变量范围的问题。我在事件 block 外部声明了变量 BMI,但随后在 calculate 按钮的 MouseCLick 事件中为其赋予了一个值。为什么我可以在 classify 按钮的事件中将 BMI 变量与计算值一起使用?我以为我把它改成的值是本地的,只能在那个事件中使用。

    int age;
double weight, height, BMI;

private void bt_calculate_MouseClick(object sender, MouseEventArgs e)
{


if (int.TryParse(txt_age.Text, out age) && double.TryParse(txt_weight.Text, out weight) && double.TryParse(txt_height.Text, out height)
&& age > 0 && weight > 0 && height > 0)

{
BMI = weight / (height * height);


if (age >= 20)
{
txt_calculate.Text = Convert.ToString(BMI);
}
else
{
MessageBox.Show("Take a look at picture 1.");
}
}
else
{
MessageBox.Show("Please provide valid values.");
}
}

private void bt_classify_MouseClick(object sender, MouseEventArgs e)
{


if (BMI <= 18.5)
{
txt_classify.Text = "Underweight";
}
else if (BMI > 18.5 && BMI <= 24.9)
{
txt_classify.Text = "Normal Weight";
}
else
{
txt_classify.Text = "Overweight";
}

}

最佳答案

您已经在类级别声明了您的字段,这意味着它们可以从类范围内的所有范围 block ({ ... }) 访问(包括方法范围和嵌套范围)。

简而言之:在一个作用域中声明的变量、字段、方法等在该作用域的所有子作用域中都可用。反之则不然:您不能在方法中声明一个变量,然后从类级别访问它。

考虑这个例子:

class Test
{
int myVariable = 5;

void TestA()
{
if (true)
{
while(true)
{
++myVariable; // this works, we can see myVariable
}
}
}

void TestB()
{
--myVariable; // this also works
}
}

在类范围内,我们有一个方法范围用于 void Test() 方法,然后我们用 if 语句创建一个范围,并在其中我们使用 while 循环创建一个进一步嵌套的作用域。因为 myVariable 是在嵌套较少的范围内声明的,所以您仍然可以访问它。

如果我们这样定义它:

class Test
{
void TestA()
{
int myVariable = 5;
}

void TestB()
{
// can't see MyVariable because it's in a different scope, and that scope isn't above the current scope
}

void TestC()
{
{
int myOtherVariable = 5;
}
// can't see myOtherVariable because it was defined in a child scope of this method scope
}
}

请注意,无论您从哪个方法引用类字段/属性,您仍在访问内存中的相同数据。请注意,当您将变量作为参数传递时,这会有所不同,并且取决于它是值类型还是引用类型。

参见 this article有关范围的更多信息。

关于c# - 为什么我可以在其他事件中使用这个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53032879/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com