繁体   English   中英

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

[英]Why is instance member static in singleton class?

这是单身人士班

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; 为什么这是静态的?

“实例”字段保存一个实例的引用。

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

因为您在静态属性(实例)中引用变量,所以不能在静态方法或属性中引用实例变量。

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

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

无论如何,都可以在任何AppDomain中使用[1]。

我认为是因为您使用过:

public static Singleton Instance()

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

因为它不是静态的,所以仅是名称上的一个单例。 我可以创建它的数千个实例。

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

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

简而言之,Singleton是一种设计模式,用于确保在给定范围内仅创建了某事物的一个实例。

此模式通过几个主要概念完成:

  1. 创建某个对象的静态实例
  2. 创建一个私有的构造函数
  3. 不允许该类被另一个(密封的)扩展
  4. 提供一个静态方法,该方法返回静态对象的实例

您提供的示例代码是Singleton模式的教科书示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM