メソッド内で宣言された変数をローカル変数といいます。これは、第22章でちょっとだけ触れています。
ローカル変数は、そのメソッドが復帰した時点で無効となります。これに対して、インスタンスフィールドはオブジェクトが有効な限り値を保有し続けます。ローカル変数に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