为什么实例成员在单例类中是静态的?

时间:2012-01-26 16:42:22

标签: c# singleton

这是一个单身类

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 个答案:

答案 0 :(得分:7)

'instance'字段保存唯一实例的引用。

它存储在静态变量中,因为它的范围必须是类本身而不是特定的实例。

答案 1 :(得分:5)

因为您在静态属性(实例)中引用变量,并且您无法在静态方法或属性中引用实例变量。

拥有一个Singleton的想法是只运行一个且只有一个实例。

答案 2 :(得分:1)

Singleton的目的是只拥有该对象的一个​​实例[1]。通过使用在第一次访问时自动实例化的私有静态实例创建一个密封类,您提供了必要的特性,即只创建一个实际对象的副本,然后由系统中其他位置的Singleton.Instance属性访问。

无论如何,

[1]在任何AppDomain中。

答案 3 :(得分:0)

因为它不是静态的,所以它只是名义上的单身。我可以创建成千上万的实例。

答案 4 :(得分:0)

因为你只需要程序中的一个(静态)实例

答案 5 :(得分:0)

它是静态的,因此Singleton类型的每个实例都将使用相同的变量,因此是“单例”模式。

答案 6 :(得分:0)

简洁地说,Singleton是一种设计模式,用于确保在给定范围内只创建一个事物实例。

这种模式由几个主要概念完成:

  1. 创建某个对象的静态实例
  2. 创建私有构造函数
  3. 禁止该课程由另一个(密封)延长
  4. 提供一个返回静态实例的静态方法 对象
  5. 您提供的示例代码是Singleton模式的教科书示例。

答案 7 :(得分:0)

我认为因为您使用了:

(Pry.methods - Object.methods).sort

该函数是静态的,因此您的实例变量也需要是静态的。