ローカルスコープとグローバルスコープ
メニューを表示するにはスワイプしてください
変数のスコープとは、その変数にアクセスできるコードの範囲。 C# では、グローバルスコープと複数のローカルスコープが存在。
メソッドの外で変数を作成すると、プログラム内のほぼどこからでもアクセス可能なため、グローバルスコープを持つとされる。
main.cs
1234567891011121314151617181920using System; namespace ConsoleApp { internal class Program { static int myVariable = 10; // Variable with a Global Scope static void testMethod() { // Accessing `myVariable` inside `testMethod` Console.WriteLine($"testMethod: {myVariable}"); } static void Main(string[] args) { // Accessing `myVariable` inside `Main` method Console.WriteLine($"Main Function: {myVariable}"); testMethod(); } } }
注意
変数をメソッドの外で宣言する場合、宣言の前に
staticキーワードを付けることが重要。
上記の例では、myVariable メソッドと Main の両方で testMethod 変数にアクセスしている。ただし、これは常に可能とは限らない。
コードブロック内で宣言された変数は、そのブロックおよび含まれるサブコードブロック内でのみアクセス可能。
例えば、メソッド内で宣言された変数は、そのメソッド内でのみ直接アクセスできる。同様に、if、else if、else ブロック内で宣言された変数も、そのブロック内でのみアクセス可能。このような変数はローカルスコープを持つとされる。
次のコードを確認し、どのように動作するか理解してみる。
main.cs
123456789101112131415161718192021222324252627282930313233using System; namespace ConsoleApp { class Program { static int variable_1 = 1; static void Main(string[] args) { int variable_2 = 2; if (true) { int variable_3 = 3; Console.WriteLine(variable_1); Console.WriteLine(variable_2); Console.WriteLine(variable_3); } Console.WriteLine(variable_1); Console.WriteLine(variable_2); Console.WriteLine(variable_3); // ERROR HERE Console.WriteLine(variable_4); // ERROR HERE // Note: A variable cannot be used before it's defined in the code } static void myMethod() { int variable_4 = 4; Console.WriteLine(variable_1); Console.WriteLine(variable_2); // ERROR HERE Console.WriteLine(variable_3); // ERROR HERE Console.WriteLine(variable_4); } } }
上記のコードには4つの変数があります:
variable_1- グローバルスコープ;variable_2- Main メソッド内で定義されたローカルスコープ;variable_3-ifブロック内で定義されたローカルスコープ;variable_4-myMethodメソッド内で定義されたローカルスコープ。
このプログラムは必ずしもコンパイルできるとは限りませんが、特定の変数がどこでアクセス可能か、またどこでアクセスできないかを示しています。変数がアクセス可能なコード領域を、その変数のスコープと呼びます。
variable_1はグローバル変数であり、ほぼすべての場所でアクセス可能;variable_2はMainメソッド全体でアクセス可能であり、if条件などのサブブロックも含みます;variable_3はifブロック内のみでアクセス可能;variable_4はmyMethodブロック内のみでアクセス可能。
すべて明確でしたか?
フィードバックありがとうございます!
セクション 1. 章 58
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 1. 章 58