C#のスコープまとめ!変数の有効範囲とライフサイクルをわかりやすく解説
生徒
「C#で変数を使うときに、どこまで使えるかって決まってるんですか?」
先生
「はい、それはスコープ(変数の有効範囲)と呼ばれる仕組みで決まっています。」
生徒
「スコープって、具体的にどういうことですか?」
先生
「それでは、C#におけるスコープの基本を見ながら、わかりやすく説明していきましょう!」
1. スコープとは?
スコープとは、ある変数や関数が使える「範囲」のことを指します。たとえば、「家の中ではテレビのリモコンが使えるけど、外では使えない」というようなイメージです。プログラミングにおいても、変数が使える場所は決まっていて、スコープの外ではその変数にアクセスできません。
2. C#のスコープの種類
C#では、主に次の4つのスコープがよく使われます。
- ローカルスコープ:メソッドの中で使う変数のスコープ
- ブロックスコープ:if文やfor文などの中だけで使えるスコープ
- メンバースコープ:クラス内で使う変数(フィールド)のスコープ
- 名前空間スコープ:名前空間全体でアクセス可能なクラスなど
それぞれのスコープを簡単なコードで見ていきましょう。
3. ローカルスコープの例
メソッドの中で定義した変数は、そのメソッドの外からは使えません。これがローカルスコープです。
void Greet()
{
string message = "こんにちは!";
Console.WriteLine(message);
}
こんにちは!
message
という変数は、Greet()
メソッドの中でしか使えません。
4. ブロックスコープの例
if文やfor文などの中で定義した変数は、そのブロック(中カッコ { }
)の外では使えません。
if (true)
{
int number = 10;
Console.WriteLine(number);
}
// ここでnumberを使おうとするとエラーになります
10
number
という変数は、if文の中だけで有効なスコープです。
5. メンバースコープの例
クラスの中で宣言された変数(フィールド)は、そのクラス内であればどこでも使えます。
class Person
{
string name = "たろう";
void SayName()
{
Console.WriteLine(name);
}
}
たろう
name
という変数はPerson
クラスの中であれば、SayName()
メソッドの中でも使えます。
6. スコープと変数のライフサイクル
ライフサイクルとは、「変数がいつ作られて、いつ消えるのか」という生存期間のことです。スコープが終わると、変数は自動的に消えて使えなくなります。
- ローカル変数:メソッドやブロックが終了すると自動的に消える
- フィールド:オブジェクトが存在する限り使える
つまり、スコープ=使える範囲、ライフサイクル=使える時間と考えると、わかりやすいです。
7. 同じ名前の変数に注意
スコープによって、同じ名前の変数を使えることもありますが、意図しない上書きが起きることがあります。
int x = 5;
if (true)
{
int x = 10; // エラー:xはすでに定義されています
Console.WriteLine(x);
}
外側で定義された変数と同じ名前をブロック内で使うと、エラーになります。変数名はスコープごとに意識して使いましょう。
8. 実際に手を動かしてスコープを確認しよう
Visual Studio やオンラインの C# 実行環境(.NET Fiddle など)で、上記のコード例を実際に試してみましょう。「ここでは使えるけど、ここでは使えない」という感覚を、自分の手で確かめることが、理解への近道です。