好的,如果我创建一个单例类并通过公共静态属性公开单例对象......我明白了。
但我的单例类中还有其他属性。那些应该是静态的吗?这些也应该是私人的?
我只想通过这样做来访问我的单例类的所有属性:
MySingletonClass.SingletonProperty.SomeProperty2
SingletonProperty返回单个单例实例。我想我的问题是,如何在singleton类中公开其他属性..将它们设为私有,然后通过公共单例静态属性访问它们?
或者单身人士的所有其他属性和方法是否应该是公共非静态的?
答案 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