C# 変数のスコープ
C# 変数のスコープ
このチュートリアルでは、例を使用して C# の変数スコープについて学習します。
変数のスコープは、コードの特定の部分で変数を使用できるかどうかを示します。
C# では、変数には 3 種類のスコープがあります。
- クラス レベルの範囲
- メソッド レベルの範囲
- ブロック レベルの範囲
C# クラス レベル変数のスコープ
C# では、クラス内で変数を宣言すると、クラス内で変数にアクセスできます。これは、クラス レベルの変数スコープと呼ばれます .
クラス レベルの変数はフィールドと呼ばれ、クラスのメソッド、コンストラクタ、およびブロックの外で宣言されます。たとえば、
using System;
namespace VariableScope {
class Program {
// class level variable
string str = "Class Level";
public void display() {
Console.WriteLine(str);
}
static void Main(string[] args) {
Program ps = new Program();
ps.display();
Console.ReadLine();
}
}
}
出力
Class Level
上記の例では、str という名前の変数を初期化しました。 プログラム内 クラス。
これはクラス レベルの変数であるため、クラス内に存在するメソッドからアクセスできます。
public void display() {
Console.WriteLine(str);
}
これは、クラス全体でクラス レベル変数にアクセスできるためです。
注意 :静的メソッドを介してクラス レベル変数にアクセスすることはできません。たとえば、Program 内に静的メソッドがあるとします。 クラス。
static void display2() {
// Access class level variable
// Cause an Error
Console.WriteLine(str);
}
メソッド レベル変数のスコープ
メソッド内で変数を宣言すると、その変数はメソッドの外ではアクセスできません。これは、メソッド レベル変数のスコープと呼ばれます .たとえば、
using System;
namespace VariableScope {
class Program {
public void method1() {
// display variable inside method
string str = "method level";
}
public void method2() {
// accessing str from method2()
Console.WriteLine(str);
}
static void Main(string[] args) {
Program ps = new Program();
ps.method2();
Console.ReadLine();
}
}
}
上記の例では、str という名前の変数を作成しました。 method1()
内 .
// Inside method1()
string str = "method level";
ここで、str メソッドレベルの変数です。したがって、method1()
の外ではアクセスできません。 .
ただし、 str
にアクセスしようとすると method2()
からの変数
// Inside method2
Console.WriteLine(str); // Error code
エラーが発生します。
Error CS0103 The name 'str' does not exist in the current context
これは、メソッド レベルの変数は、それらが作成されたメソッド内にスコープがあるためです。たとえば、
using System;
namespace VariableScope {
class Program {
public void display() {
string str = "inside method";
// accessing method level variable
Console.WriteLine(str);
}
static void Main(string[] args) {
Program ps = new Program();
ps.display();
Console.ReadLine();
}
}
}
出力
inside method
ここで、 str を作成しました 変数にアクセスし、同じメソッド display()
内でアクセスしました .したがって、コードはエラーなしで実行されます。
C# のブロック レベル変数のスコープ
ブロック内で変数を宣言すると (for ループ、while ループ、if..else)、変数はブロック内でのみアクセスできます。これは、ブロック レベル変数のスコープと呼ばれます .たとえば、
using System;
namespace VariableScope {
class Program {
public void display() {
for(int i=0;i<=3;i++) {
}
Console.WriteLine(i);
}
static void Main(string[] args) {
Program ps = new Program();
ps.display();
Console.ReadLine();
}
}
}
上記のプログラムでは、ブロック レベル変数 i
を初期化しました。 for
の中 ループ。
for(int i=0;i<=3;i++) {
}
私以来 for の外で変数にアクセスしようとすると、ブロック レベルの変数になります。 ループ、
// Outside for loop
Console.WriteLine(i);
エラーが発生します。
Error CS0103 The name 'i' does not exist in the current context
C言語