メソッド内で宣言された変数をローカル変数といいます。これは、第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