我刚开始学习c#而且我遇到了令人困惑的事情,我希望有人可以向我解释一下:)
namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int Md = 0;
private void cmdAnzeigen1_Click(object sender, EventArgs e)
{
int x = 0;
Md = Md + 1;
x = x + 1;
lblErgebnis.Text = "x: " + x + "\n" + "Gx:" + Md;
}
}
}
为什么Md
总是增加1,但x
没有(保持1)?我不明白,它们都是相同的变量。
答案 0 :(得分:7)
Md
是一个实例变量,在任何方法之外声明。它是对象状态的一部分,因此只要对象“活着”,它就“活着”(并保持其值)。 Form1
的不同实例将具有独立的Md
变量。
x
是一个本地变量 - 每次调用该方法时都会有一个新变量,它始终以值0开始。
如果这还不够解释,请参考一本很好的C#书或教程 - 解释变量的所有内容对于Stack Overflow来说会有点多,这对于处理特定问题比学习编程语言的基础更重要。
答案 1 :(得分:1)
x是局部变量。它只存在于cmdAnzeigen1_Click()
- 方法的范围内。每当调用它时,x都会以0初始化,然后递增。因此,在方法的最后,它始终是1.然而,另一个生活在类的范围内,它不会重新初始化并保持它在类生存时的价值。
另外,查看方法的代码 - 每次迭代都会重新声明和初始化变量。这是它的工作原理:该方法中的代码将在被调用时按顺序处理,并且该初始化不会超过该方法。
至于scopes,尝试这样的事情,看看会发生什么:
int x = 1;
{
int y = x + 1;
}
int z = x + y;
它会抛出一个错误,因为括号引入了一个新范围。来自外部的变量可用于内部,但反之亦然。
答案 2 :(得分:1)
当你的方法(cmdAnzeigen1_Click
)完成执行时,你x
变量正在使用的内存已经准备就绪,可以在别处再次使用,以及驻留的任何其他变量在方法中。
您的表单也会发生同样的情况。
如果你有类似的东西
using(Form1 frm = new Form1()
{
frm.ShowDialog();
}
然后,一旦你离开使用区块,变量Md
在内存中的位置就会被释放。
Md
能够增加,因为它仍然在内存中保留其位置,其中x
在方法后不再需要
答案 3 :(得分:0)
因为MD是类级变量而x不是。每次点击都会创建并销毁x。但保留了Md的价值。 Md将保留其值,直到保留Form1
。
答案 4 :(得分:0)
这是因为您的变量的 scope 。 MD在函数范围之外声明,即在实例范围内,因此当您单击按钮时,它永远不会重新初始化。 x在函数范围内,因此每次单击按钮时它都会重新初始化为0.