.NET の静的コンストラクタ

.NET のクラスには、静的コンストラクタというものがある。
これは .NET で、そのクラスが初めて使用される直前 (より厳密には、そのクラスの型がインスタンス化される直前) に自動的に呼び出される初期化用の関数である。
複数のスレッドが単一のクラスをはじめて使用しようとする場合も、この静的コンストラクタは 1 度しか呼ばれないように保証される (はず)。
クラス内の静的なフィールドを、定数以外で、安全に初期化するタイミングとして最適。これを知らなかったころは、すごい変なコードを自前で書いて実装していた。


なお、静的コンストラクタが例外を発生させた場合はどうなるのかということが興味深いが、どうやら、例外が発生した後もそのクラス自体は普通に使えるようである。ただし例外が発生した場所以降の静的コンストラクタの初期化処理は行われないので、そのクラスの静的フィールドの内部状態は未初期化のまま放置されてしまうということになる。


例として、以下のようなプログラムを書くと、
外部から TestClass.TestString を最初に参照しようとすると、直前に自動的に静的コンストラクタである static TestClasss() が呼び出され、初期化された後の TestClass.TestString の値が返される。

static class TestClass
{
	public static string TestString;

	static TestClass()
	{
		TestClass.TestString = "こんちは!";
	}
}

class Program
{
	static void Main(string[] args)
	{
		System.Console.WriteLine(TestClass.TestString);
	}
}