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 になってしまいます。
このサイトのページへのリンクは自由に行っていただいてかまいません。
このサイトで公開している全ての画像、プログラム、文書の無断転載を禁止します。
ここをクリック
すると表示されるページから作者へメールで連絡できます。