Это правильная, ленивая, поточно-ориентированная реализация Singleton для C #? - PullRequest
5 голосов
/ 11 апреля 2010

Я реализовал шаблон Singleton следующим образом:

public sealed class MyClass {

    ...

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

    ...

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

Начиная с Googling для реализации C # Singleton, не похоже, что это распространенный способ работы в C #. Я нашел одну подобную реализацию, но класс SingletonHolder не был статическим и включал явный (пустой) статический конструктор.

Это правильный, ленивый, поточно-ориентированный способ реализации шаблона Singleton? Или мне чего-то не хватает?

1 Ответ

6 голосов
/ 11 апреля 2010

Джон Скит написал статью о реализации шаблона 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();
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...