私はhereという以下のシングルトン実装を行っていました。私は静的コンストラクタが最初の静的メソッド呼び出しの前に実行されるか、またはオブジェクトがインスタンス化される前に実行されることを理解しますが、ここで(コメントからの)使用さえ理解できませんでした。誰も私がそれを理解するのを助けることができますか?空の静的コンストラクタを使用したシングルトン実装
public sealed class Singleton
{
private static readonly Singleton instance = new Singleton();
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Singleton()
{
}
private Singleton()
{
}
public static Singleton Instance
{
get
{
return instance;
}
}
}
これは、その下の箇条書きの点で具体的に説明されています。 '型初期化子の怠惰は、型が 'beforefieldinit'という特別なフラグでマークされていない場合にのみ.NETによって保証されます。残念ながら、C#コンパイラ(.NET 1.1ランタイムでは少なくとも提供されています)は、静的コンストラクタ(つまり、コンストラクタのように見えますが、静的とマークされたブロック)を持たないすべての型を 'beforefieldinit'彼は 'new Singleton()'をできるだけ遅く(遅れて)構築したいと思っています。これを行うためにC#コンパイラを得る唯一の方法は空の静的コンストラクタを提供することです。 – porges
私の無知を許してください。 「初期化器の怠惰」とは何ですか?最初の要求時に初期化されますか? – Nemo
正確に。そのような場合にのみ保証されます。そうしないと、型がロードされるとすぐにランタイムは必要なときにいつでも型初期化子を実行できます。もっと長い説明については、Jayの答えのリンクを参照してください。 – porges