静的クラスのメンバーの初期化には、初期化子または静的コンストラクタを使用すべきである。
インスタンスのコンストラクタや、何らかのprivateメソッド、その他の方法は使用すべきではない。
初期化に複雑な処理が必要なら、Lazy<T>
クラスによる遅延初期化を考慮すべきだ。
以下は、初期化子を使用したSingletonパターンの実装例である。
public class MySingleton
{
public static MySingleton Instance { get; } = new MySingleton();
private MySingleton()
{
}
}
静的コンストラクタは、初めてクラスにアクセスされた際に自動的に実行される。
静的コンストラクタは1つだけ定義可能で、引数をとることはできない。
静的コンストラクタを使用する理由として、最も一般的なのは初期化時の例外処理である。
static MySingleton()
{
try
{
Instance = new MySingleton();
}
catch
{
// 例外発生時の復帰処理
}
}
参考: Lazy