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

1

メソッド ( cmdAnzeigen1_Click) の実行が終了すると、x変数が使用しているメモリが解放され、メソッド内に存在する他の変数と同様に、別の場所で再び使用できるようになります。

フォームでも同じことが起こります。

似たようなものがあれば

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

次に、using ブロックを離れるとすぐにMd、メモリ内の変数の場所が解放されます。

Mdメモリ内の場所を保持しているため、インクリメントできますが、xpost メソッドは不要になりました。

于 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 は関数スコープ内にあるため、ボタンをクリックするたびに 0 に再初期化されます。

于 2013-07-20T10:12:16.923 に答える
0

MD はクラス レベル変数であり、x はそうではないためです。クリックするたびに x が作成され、破棄されます。ただし、Md の値は保持されます。Md は、保持されるまでその値を保持しますForm1

于 2013-07-20T10:11:25.137 に答える