工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C# 変数のスコープを理解する:クラス、メソッド、ブロックレベル

C# 変数のスコープを理解する

このガイドでは、C# における変数スコープの仕組みを、クラスレベル、メソッドレベル、ブロックレベルのスコープを明確な実例で解説します。

変数スコープは、コード内で変数にアクセスできる場所を決定します。C# では主に 3 つのスコープに遭遇します。

  • クラスレベルスコープ
  • メソッドレベルスコープ
  • ブロックレベルスコープ

クラスレベル変数スコープ

クラス内でメソッドやコンストラクタの外側に変数を宣言すると、それはフィールドとなり、そのクラスのすべてのメンバーからアクセス可能になります。これを クラスレベルスコープ と呼びます。

using System;
namespace VariableScope {
    class Program {
        // クラスレベルフィールド
        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 がフィールドであるため、Program クラス全体で、Display メソッドを含めて利用可能です。

重要な注意点: インスタンスフィールドは、インスタンスを使用しない限り static メソッドからアクセスできません。例:

static void Display2() {
    // これはコンパイルエラーになる
    Console.WriteLine(str);
}

メソッドレベル変数スコープ

メソッド内で宣言された変数はそのメソッドにローカルです。定義したメソッドの外部から参照できません。これを メソッドレベルスコープ と呼びます。

using System;
namespace VariableScope {
    class Program {
        public void Method1() {
            // ローカル変数
            string str = "method level";
        }
        public void Method2() {
            // ここで str にアクセスしようとするとエラー
            Console.WriteLine(str);
        }
        static void Main(string[] args) {
            Program ps = new Program();
            ps.Method2();
            Console.ReadLine();
        }
    }
}

Method2 で str を使用しようとすると、コンパイラエラー:

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";
            Console.WriteLine(str);
        }
        static void Main(string[] args) {
            Program ps = new Program();
            ps.Display();
            Console.ReadLine();
        }
    }
}

出力

inside method

C# におけるブロックレベル変数スコープ

ループ、if 文、その他のネストしたスコープなどのブロック内で宣言された変数は、そのブロック内でのみアクセス可能です。これを ブロックレベルスコープ と呼びます。

using System;
namespace VariableScope {
    class Program {
        public void Display() {
            for (int i = 0; i <= 3; i++) {
                // i はこの for ループ内に限定される
            }
            // Console.WriteLine(i); // ❌ コンパイルエラー
        }
        static void Main(string[] args) {
            Program ps = new Program();
            ps.Display();
            Console.ReadLine();
        }
    }
}

ここではループカウンタ i はループ終了後に参照できません。スコープがブロックとともに終了するためです。

C言語

  1. C++ポインタをマスター:概念、例、実践的応用
  2. C 言語の変数、データ型、定数 – 実践ガイド
  3. C言語の変数を理解する:型、命名規則、メモリ管理
  4. C言語のスコープルール:ローカル、グローバル、仮パラメータの理解
  5. C言語ポインタ完全マスター:実践的ステップで上級プログラミングへ
  6. C言語可変長引数のマスター:実践ガイド
  7. Verilog代入文の理解:種類、構文、ベストプラクティス
  8. ゲートレベルモデリング:ハードウェア回路図からVerilogコードへ
  9. 任意のスコープでのVerilog timescale理解と表示
  10. Python globalキーワード完全マスター: 使い方とタイミング
  11. Java変数の種類:ローカル、インスタンス、クラス変数を徹底解説