2

我刚开始学习 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)?我不明白,它们都是相同的变量。

4

5 回答 5

7

Md是一个实例变量,在任何方法之外声明。它是对象状态的一部分,因此只要对象“活着”,它就会“活着”(并保持其值)。的不同实例Form1将具有自Md变量。

x是一个局部变量 - 每次调用该方法时都会有一个新变量,它总是以值 0 开头。

如果这还不够解释,请查阅一本很好的 C# 入门书籍或教程 - 解释有关变量的所有内容对于 Stack Overflow 来说有点多,它更多的是用于处理特定问题而不是学习编程语言的基础知识。

于 2013-07-20T10:11:39.750 回答
1

当您的方法 ( cmdAnzeigen1_Click) 完成执行时,您的x变量正在使用的内存将被释放,准备在其他地方再次使用,以及驻留在该方法中的任何其他变量。

您的表格也会发生同样的情况。

如果你有类似的东西

using(Form1 frm = new Form1()
{
frm.ShowDialog();
}

然后,一旦您离开 using 块,该变量Md在内存中的位置就会被释放。

Md能够递增,因为它仍然在内存中占有一席之地,而不再x需要 post 方法

于 2013-07-20T10:17:30.880 回答
1

x 是一个局部变量。它只存在于cmdAnzeigen1_Click()-Method 的范围内。每当调用它时,x 都会用 0 重新初始化,然后递增。所以在方法结束时,它总是 1。然而,另一个存在于类的范围内,它不会重新初始化并在类存在的时间内保持它的值。

另外,查看方法的代码——每次迭代都重新声明和初始化变量。这就是它的工作原理:该方法中的代码将在调用时按顺序处理,并且该初始化不会超过该方法。

至于scopes,试试这样的,看看会发生什么:

int x = 1;
{
    int y = x + 1;
}
int z = x + y;

它会抛出一个错误,因为括号引入了一个新的范围。外部变量对内部可用,反之则不行。

于 2013-07-20T10:12:46.620 回答
0

因为 MD 是类级别的变量,而 x 不是。每次单击时,都会创建和销毁 x。但保留 Md 的值。Md 将保留其价值,直到Form1被保留。

于 2013-07-20T10:11:25.137 回答
0

这是因为变量的范围。MD 声明在函数范围之外,即在实例范围内,因此当您单击按钮时它永远不会重新初始化。而 x 在函数范围内,因此每次单击按钮时它都会重新初始化为 0。

于 2013-07-20T10:12:16.923 回答