c# static コンストラクタ

c++ にはない静的メンバ用のコンストラクタを定義できます。
コンストラクタに、static キーワードを付ければよいのですが、 直接呼び出すことはできないため、 アクセス修飾子 (public など) を付けるとコンパイルエラーになります。

静的コンストラクタは、メンバメソッドや静的メソッドが呼び出される前に1回だけ 呼ばれることが保証されていますが、タイミングは制御できません。 特に、静的コンストラクタや、静的変数の初期化は、c++ のようにモジュールロード時に実行されるとは限らない ので、注意が必要です。

class StartTimeBug
{
  protected static StartTimeBug singleton = new StartTimeBug();
  public static StartTimeBug Get { get { return singleton; } }
    
  DateTime start;

  static StartTimeBug()
  {
    Console.WriteLine("static StartTimeBug() called.");
  }
    
  StartTimeBug()
  {
    start = DateTime.Now;
  }

  public double EllapsedSeconds()
  {
    TimeSpan span = DateTime.Now - start;
    return span.TotalSeconds;
  }
}

例えば、上記例は、singleton = new StartTimeBug() がプログラム起動時に呼び出されることを期待したコードですが、実際には、EllapsedSeconds() の実行の直前まで呼び出されない可能性があります。実際、Visual C# 2008 Express Edition でコンパイルした場合には直前まで呼びだされないので、プログラム開始からいくら時間を経過させても、初回の EllapsedSeconds() の返り値はほぼ 0 になってしまいます。

となりのページ

このサイトについて

このサイトのページへのリンクは自由に行っていただいてかまいません。
このサイトで公開している全ての画像、プログラム、文書の無断転載を禁止します。

連絡先

ここをクリック すると表示されるページから作者へメールで連絡できます。

共有