Почему член экземпляра статичен в одноэлементном классе? - PullRequest
0 голосов
/ 26 января 2012

Это одноэлементный класс

public sealed class Singleton
{
    static Singleton instance=null;
    static readonly object padlock = new object();

    Singleton()
    {
    }

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

мой вопрос static Singleton instance=null; почему это статично?

Ответы [ 8 ]

7 голосов
/ 26 января 2012

Поле 'instance' содержит ссылку на единственный экземпляр.

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

5 голосов
/ 26 января 2012

Поскольку вы ссылаетесь на переменную внутри статического свойства (экземпляра) и не можете ссылаться на переменные экземпляра внутри статических методов или свойств.

Идея наличия синглтона состоит в том, чтобы постоянно работать только один и только один экземпляр.

1 голос
/ 26 января 2012

Цель Singleton - иметь только один экземпляр этого объекта [1]. Создав запечатанный класс с закрытым статическим экземпляром, который автоматически создается при первом доступе, вы обеспечиваете его необходимую черту - создание только одной копии фактического объекта, к которому затем обращается свойство Singleton.Instance в другом месте системы.

[1] в любом домене приложений.

0 голосов
/ 08 июля 2015

Я думаю, потому что вы использовали:

public static Singleton Instance()

Эта функция статическая, поэтому переменная вашего экземпляра также должна быть статической.

0 голосов
/ 26 января 2012

Вкратце, Singleton - это шаблон проектирования, используемый для обеспечения того, чтобы только один экземпляр чего-либо когда-либо создавался в данной области видимости.

Этот шаблон выполняется с помощью нескольких основных концепций:

  1. создание статического экземпляра некоторого объекта
  2. создание частного конструктора
  3. запрещениекласс, который будет расширен другим (запечатанным)
  4. , предоставляя статический метод, который возвращает экземпляр статического объекта

Приведенный вами пример кода является учебным примером шаблона Singleton.

0 голосов
/ 26 января 2012

Это статично, поэтому каждый экземпляр типа Singleton будет использовать одну и ту же переменную, отсюда и шаблон "singleton".

0 голосов
/ 26 января 2012

Поскольку вам нужен только один (статический) экземпляр в программе

0 голосов
/ 26 января 2012

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

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