tonari note

オンラインゲームエンジニアの雑記

静的クラスのお話

C#では静的クラスというものを宣言することができます。

静的クラスと静的クラス メンバ(MSDN)

静的クラスには以下の特徴があります。

  • 全てのメンバーは静的でなければなりません。
  • 通常のクラスのようにインスタンス化はできません。
  • インターフェイスの実装や、継承はできません。
  • 静的クラスを継承することはできません。

これらの特徴を使用して、シングルトンパターンの様に扱うことができます。

また、あらかじめ初期値を設定したい場合は、通常のコンストラクタの代わりに静的コンストラクタを使用します。

静的コンストラクタ(MSDN)

静的コンストラクタは以下の特徴があります。

  • アクセス修飾子がありません。
  • 外部から明示的に呼び出すことができません。(いわゆるprivate状態)
  • 引数は必ず無しで、指定できません。
  • 呼び出されるタイミングを指定することはできません。
using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Before");

        StaticClass.Method();

        Console.WriteLine("After");
    }
}

static class StaticClass
{
    static StaticClass()
    {
        Console.WriteLine("静的コンストラクタが呼ばれました");
    }

    public static void Method()
    {
        Console.WriteLine("静的メソッドが呼ばれました。");
    }
}

実行結果

Before
静的コンストラクタが呼ばれました
静的メソッドが呼ばれました。
After