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

C#の静的メンバー(staticメンバー)とは?特徴と使い方を実例で解説

C#における静的メンバーの基本

C#では、staticキーワードを使うことで、クラスのメンバーを「静的メンバー」として定義できます。クラスのメンバーをstaticとして宣言すると、そのクラスからいくつのオブジェクト(インスタンス)を作成しても、静的メンバーの実体は常に1つだけであることを意味します。

つまり、staticキーワードは「そのメンバーがクラスに対してただ1つだけ存在する」ことを表しています。この特性を活かし、静的変数は定数の定義などによく使われます。静的変数には、クラスのインスタンスを生成しなくても、クラス名を指定するだけで直接アクセスできるという利点があります。

また、静的変数はメンバー関数の外側やクラス定義の外側で初期化できるほか、クラス定義の中で初期化することも可能です。

静的メンバーのサンプルコード

以下に、C#の静的変数の動作を確認できる具体的な例を示します。

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();
        }
    }
}

コードのポイント

このサンプルでは、StaticVarクラス内に静的変数numを宣言しています。オブジェクトs1s2はそれぞれ別のインスタンスですが、numは静的メンバーのため両者が共有する単一の変数です。そのため、s1で3回、s2で3回、合計6回count()メソッドを呼び出すと、どちらのインスタンスから値を取得しても同じ結果になります。

実行結果

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

結果からわかること

出力を見ると、s1s2のどちらのオブジェクトからgetNum()を呼び出しても「6」が返されています。これは、静的変数numが各オブジェクトごとではなく、クラス全体で1つだけ存在し、すべてのインスタンス間で共有されている証拠です。このように、静的メンバーはカウンター、設定値、共通の定数など、複数のオブジェクトで共有したいデータを扱う際に非常に便利です。

  1. Javaクラスの静的メンバーはどのような順序で読み込まれる?JVMの処理手順を解説

    Javaにおいて、静的変数(static変数)はクラスがロードされるタイミングで生成されます。これは静的ブロック(staticブロック)が実行されるよりも前の段階であり、静的ブロックの主な役割は静的変数に値を代入することです。静的変数には、定義されたクラスのすべてのインスタンス間で共有される値が格納されます。一方、静的ブロックとは、クラスが最初にロードされるときに一度だけ実行されるコード領域のことです。したがって、クラスロード時に実行したい初期化処理やロジックがある場合は、その処理を静的ブロック内に記述しておくことで、クラスのロード時に確実に実行させることができます。JVMが静的メンバーを読み

  2. Pythonの静的メソッド(@staticmethod)とは?仕組みと使い方を解説

    Pythonのクラスには、インスタンスメソッド、クラスメソッド、静的メソッド(スタティックメソッド)という3種類のメソッドを定義できます。それぞれ役割や呼び出し方が異なり、適切に使い分けることでコードの可読性と保守性が向上します。3種類のメソッドの違いインスタンスメソッド: 第1引数に self を受け取り、オブジェクト(インスタンス)の状態にアクセス・変更できます。クラスメソッド: @classmethod デコレータを付け、第1引数に cls を受け取り、クラス自体の状態にアクセスできます。静的メソッド: @staticmethod デコレータを付け、self も cls も受け取りません