Klasa Static Constructor i Singleton

Mam pamięć podręczną obiektów, która implementuje wzorzec projektu Singleton. Moje podejście do singletonu polegało zawsze na leniwym ładowaniu statycznej instancji, gdy po raz pierwszy uzyskano dostęp do właściwości.

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

Wiem jednak, że to podejście nie jest bezpieczne dla wątków, a sprawdzenie, na przykład, że jest zerowe, wprowadza małą nieefektywność. Czy rozsądnie byłoby zaimplementować konstruktor statyczny w klasie, która tworzy instancję statyczną?

Jak rozumiem, konstruktor statyczny byłby wywoływany za każdym razem, gdy pojawił się pierwszy statyczny dostęp do właściwości. Czy jest to poprawne i czy zapewni jakiekolwiek korzyści w porównaniu z obecnym podejściem do leniwego obciążenia, czy też lepiej byłoby zbadać implementację proxy lub użyć blokady, aby zmusić ją do bezpiecznego wątku?

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

Nie mam zbyt wiele doświadczenia z konstruktorami statycznymi, więc nie chcę przeskakiwać z tym pomysłem, jeśli jest to równa lub gorsza implementacja właściwości ładowania leniwego.

Pozdrawiam, Gary

questionAnswers(2)

yourAnswerToTheQuestion