Statischer Konstruktor & Singleton-Klasse

Ich habe einen Objekt-Cache, der das Singleton-Entwurfsmuster implementiert. Mein Ansatz für Singleton war es immer, die statische Instanz beim ersten Zugriff auf die Eigenschaft zu verzögern.

public static Widget
{
    get
    {
        if(instance==null) instance = new Widget();
        return instance;
    }
}

Ich weiß jedoch, dass dieser Ansatz nicht threadsicher ist und die Überprüfung, zum Beispiel Null, eine kleine Ineffizienz mit sich bringt. Wäre es sinnvoll, einen statischen Konstruktor für die Klasse zu implementieren, der die statische Instanz instanziiert?

Soweit ich weiß, wird der statische Konstruktor immer dann aufgerufen, wenn der erste Zugriff auf statische Eigenschaften erfolgt. Ist dies gültig und bietet es Vorteile gegenüber dem derzeitigen Ansatz des verzögerten Ladens, oder ist es besser, eine Proxy-Implementierung zu untersuchen oder eine Sperre zu verwenden, um die Thread-Sicherheit zu erzwingen?

public static Widget
    {
        get
        {
            if(instance==null)
            {
                lock(padlock)
                {
                    if(instance==null) instance = new Widget();
                }
            }
            return instance;
        }
    }

Ich habe nicht viel Erfahrung mit statischen Konstruktoren, also möchte ich mich nicht auf diese Idee einlassen, wenn es sich um eine gleichwertige oder schlechtere Implementierung der Lazy-Load-Eigenschaft handelt.

Prost, Gary

Antworten auf die Frage(2)

Ihre Antwort auf die Frage