单身人士属性

时间:2010-03-08 21:16:58

标签: c# design-patterns singleton

好的,如果我创建一个单例类并通过公共静态属性公开单例对象......我明白了。

但我的单例类中还有其他属性。那些应该是静态的吗?这些也应该是私人的?

我只想通过这样做来访问我的单例类的所有属性:

MySingletonClass.SingletonProperty.SomeProperty2

SingletonProperty返回单个单例实例。我想我的问题是,如何在singleton类中公开其他属性..将它们设为私有,然后通过公共单例静态属性访问它们?

或者单身人士的所有其他属性和方法是否应该是公共非静态的?

6 个答案:

答案 0 :(得分:22)

一旦你得到SingletonProperty(它是一个Object的单个实例),之后的任何东西都可以实现,就像你创建一个要实例化的类一样,因为Singleton实际上是一个常规的单个实例对象

例如,下面的Singleton(显然不是最好的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!";

答案 1 :(得分:2)

像对待任何其他类一样使它们成为公共属性。使用单例模式将独立于此。

答案 2 :(得分:2)

只要它们不是静态的,您就需要一个对象实例来访问该属性。如果创建对象实例的唯一方法是通过单例模式,那么类属性本身就是单个类实例的一部分。没有什么特别的。

答案 3 :(得分:2)

不,让他们公开。由于该类只能有一个实例,因此访问这些属性的唯一方法是通过单个实例。

答案 4 :(得分:1)

它们应该是非静态的公共属性。

这样想。你是这个类的一个单一实例 - 但仍然是一个实例。

因此,您将构造函数设为私有,并创建一个处理惰性实例化的静态属性。

所有其他属性,成员和方法应该只是实例的一部分 - 您现在已经确保的实例将是唯一的。

答案 5 :(得分:0)

您的MySingletonClass.SingletonProperty会返回对Singleton类的实例的引用。因此,您可以使用公共属性(和方法等),就像使用类的任何其他实例一样。

MySingletonClass.SingletonProperty.SomeProperty2

当你使SomeProperty2静态时,你可以做以下事情(但这不符合Singleton设计模式的精神):

MySingletonClass.SomeProperty2