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