ローカル変数は、そのメソッドが復帰した時点で無効となります。これに対して、インスタンスフィールドはオブジェクトが有効な限り値を保有し続けます。ローカル変数にstaticをつけることは許されていません。特にC/C++に慣れた人は注意が必要です。
次に、インスタンスフィールドとローカル変数の違いについて示す簡単なプログラムを示します。
// staticlocal01.cs using System; class MyClass { int x = 0; public void show1() { int x = 0; x++; // ローカル変数の値を1増やす Console.WriteLine("Local x = {0}", x); } public void show2() { x++; // インスタンスフィールドの値を1増やす Console.WriteLine("static x = {0}", x); } } class staticlocal01 { public static void Main() { MyClass mc = new MyClass(); Console.WriteLine("mcでshow1メソッド呼び出し"); for (int i = 0; i < 5; i++) mc.show1(); Console.WriteLine("\nmcでshow2メソッド呼び出し"); for (int i = 0; i < 5; i++) mc.show2(); } }では、実行結果を見てみましょう。
ローカル変数は、呼び出しごとに変数の値が振り出しに戻っています。
Update 11/Sep/2006 By Y.Kumei