Синглтон Свойства - PullRequest
       22

Синглтон Свойства

11 голосов
/ 09 марта 2010

Хорошо, если я создаю одноэлементный класс и выставляю одноэлементный объект через открытое статическое свойство ... Я понимаю это.

Но у моего синглтон-класса есть другие свойства. Должны ли они быть статичными? Должны ли они быть частными?

Я просто хочу иметь возможность получить доступ ко всем свойствам моего синглтон-класса следующим образом:

MySingletonClass.SingletonProperty.SomeProperty2

Где SingletonProperty возвращает мне единственный экземпляр Singleton. Я предполагаю, что мой вопрос, как вы выставляете другие свойства в синглтон-классе ... делаете их закрытыми и затем обращаетесь к ним через ваше общедоступное синглтон-статическое свойство?

Или все остальные ваши свойства и методы синглтона должны быть публичными нестатическими?

Ответы [ 6 ]

23 голосов
/ 09 марта 2010

Как только вы получите SingletonProperty (который является единственным экземпляром объекта), все, что после этого может быть реализовано, как если бы вы создавали класс, для которого нужно создать экземпляр, потому что Singleton - это действительно один экземпляр обычного объекта.

Например, следующий синглтон (очевидно, не лучший дизайн синглтона, но терпите меня) предлагает два открытых свойства, называемых Value и Name:

public class MySingleton
{
    private static MySingleton _instance;    

    private MySingleton() { }

    public static MySingleton Instance
    {
        get
        {
            if(_instance == null)
                _instance = new MySingleton();

            return _instance;
        }
    }

    // Your properties can then be whatever you want
    public string Value { get; set; }

    public string Name { get; set; }
}

Доступ к этим свойствам будет выглядеть так:

MySingleton.Instance.Name = "StackOverflow";

MySingleton.Instance.Value = "Rocks!";
2 голосов
/ 09 марта 2010

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

2 голосов
/ 09 марта 2010

Пока они не статичны, вам нужен экземпляр объекта для доступа к свойству. И если единственный способ создания экземпляра объекта - через одноэлементный шаблон, ваши свойства класса являются неотъемлемой частью одного экземпляра класса. Ничего особенного не требуется.

2 голосов
/ 09 марта 2010

Сделайте их общедоступными свойствами, как любой другой класс. Использование шаблона синглтона не зависит от этого.

1 голос
/ 09 марта 2010

Они должны быть нестатическими публичными свойствами.

Думай об этом так. Вы один единственный экземпляр этого класса - но все же экземпляр.

Таким образом, вы делаете свой конструктор приватным и создаете статическое свойство, которое обрабатывает ленивую реализацию.

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

0 голосов
/ 09 марта 2010

Ваш MySingletonClass.SingletonProperty возвращает ссылку на экземпляр класса Singleton. Следовательно, вы можете использовать открытые свойства (и методы и тому подобное), как и в любом другом экземпляре класса.

MySingletonClass.SingletonProperty.SomeProperty2

Когда вы сделаете SomeProperty2 статичным, вы можете сделать следующее (но это не соответствует духу шаблона проектирования Singleton):

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