Действительно ли это - допустимая, ленивая, ориентированная на многопотоковое исполнение реализация Singleton для C#?

Я реализовал Шаблон "одиночка" как это:

public sealed class MyClass {

    ...

    public static MyClass Instance {
        get { return SingletonHolder.instance; }
    }

    ...

    static class SingletonHolder {
        public static MyClass instance = new MyClass ();
    }
}

От поиска с помощью Google вокруг для реализаций Singleton C#, не кажется, что это - распространенный способ сделать вещи в C#. Я нашел одну подобную реализацию, но класс SingletonHolder не был статичен, и включал явного (пустого) статического конструктора.

Действительно ли это - допустимый, ленивый, ориентированный на многопотоковое исполнение способ реализовать Шаблон "одиночка"? Или есть ли что-то, что я пропускаю?

5
задан Matthew 11 April 2010 в 00:05
поделиться

1 ответ

Джон Скит написал статью о реализации шаблона Singleton в C #.

Ленивая реализация - это версия 5:

public sealed class Singleton
{
    Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            return Nested.instance;
        }
    }

    class Nested
    {
        // Explicit static constructor to tell C# compiler
        // not to mark type as beforefieldinit
        static Nested()
        {
        }

        internal static readonly Singleton instance = new Singleton();
    }
}

Обратите внимание, в частности, что вы должны явно объявить конструктор, даже если он пуст, чтобы сделать его закрытым.

6
ответ дан 14 December 2019 в 13:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: