C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のstaticキーワードとは?静的メンバーの基本と使い方を実例で解説

C#では、staticキーワードを使用することで、クラスのメンバーを静的(スタティック)として定義できます。クラスのメンバーをstaticとして宣言すると、そのクラスのオブジェクトをいくつ生成しても、静的メンバーのコピーはメモリ上に1つだけしか存在しないことになります。

つまり、staticキーワードは「そのメンバーがクラスに対して1つのインスタンスのみを持つ」ことを意味します。すべてのオブジェクトがこの唯一のコピーを共有するため、静的変数は値が共通して扱われる定数の定義などに適しています。また、静的メンバーにはクラス名を介して直接アクセスできるため、インスタンスを生成する必要がありません。

静的変数の使用例

以下は、静的変数の使い方を示すサンプルコードです。

using System;

namespace StaticVarApplication {
    class StaticVar {
        public static int num;

        public void count() {
            num++;
        }

        public int getNum() {
            return num;
        }
    }

    class StaticTester {
        static void Main(string[] args) {
            StaticVar s1 = new StaticVar();
            StaticVar s2 = new StaticVar();

            s1.count();
            s1.count();
            s1.count();

            s2.count();
            s2.count();
            s2.count();

            Console.WriteLine("Variable num for s1: {0}", s1.getNum());
            Console.WriteLine("Variable num for s2: {0}", s2.getNum());
            Console.ReadKey();
        }
    }
}

実行結果

Variable num for s1: 6
Variable num for s2: 6

実行結果の解説

このコードでは、s1s2という2つの異なるオブジェクトを生成し、それぞれ3回ずつcount()メソッドを呼び出しています。しかし、実行結果を見ると両方とも「6」と表示されています。

これは、numが静的変数であるためです。s1による3回のカウントアップに加え、s2による3回のカウントアップも、同じ1つの変数に対して行われています。もしnumが通常のインスタンス変数であれば、各オブジェクトごとに独立したコピーが持たれ、結果はそれぞれ「3」となります。このように、静的メンバーは全オブジェクト間で状態が共有される点が大きな特徴です。

staticキーワードの主なポイント

  • 静的メンバーはクラス全体で1つのコピーのみが存在し、すべてのインスタンスで共有される
  • インスタンスを生成せず、クラス名.メンバー名の形式で直接アクセスできる
  • 定数や、全インスタンスで共通のカウンター・設定値などの管理に便利
  • 静的メソッド内からは、同じクラスの非静的メンバーやインスタンス変数に直接アクセスできない点に注意が必要
  1. Javaのsuperキーワードとは?使い方とサンプルコードを徹底解説

    JavaのsuperキーワードとはJavaにおけるsuperキーワードは、サブクラスから直接の親クラス(スーパークラス)のメンバーやコンストラクタへアクセスするために使われる重要なキーワードです。主な役割は以下の3つです。親クラスのインスタンス参照:super変数は、直近の親クラスのインスタンスを参照します。親クラスのメソッド呼び出し:superを使うことで、オーバーライドされた親クラスのメソッドを呼び出せます。親クラスのコンストラクタ呼び出し:super()は親クラスのコンストラクタとして機能し、子クラスのコンストラクタ内では必ず最初の行に記述する必要があります。特に、オーバーライドされたメ

  2. Pythonのクラスメソッドと静的メソッドの違いを徹底解説

    Pythonにおけるクラスメソッド(classmethod)は、クラスのインスタンスではなく、クラスそのものに紐づけられるメソッドです。静的メソッド(staticmethod)もこれと似ていますが、両者にはいくつかの重要な違いがあります。クラスメソッドには@classmethodデコレータを、静的メソッドには@staticmethodデコレータをそれぞれ付与して定義します。 クラスメソッドの構文 class my_class: @classmethod def function_name(cls, arguments): # 関数の処理内容