单例实现有什么问题

What wrong with that singleton implementation

我写了静态单例,在单例class里面加了class。 然而,它似乎打破了模式。

有什么建议吗?

 public sealed class Singleton
    {
        private static readonly Singleton instance = new Singleton();
        public int MyProperty { get; set; } = 10;
        static Singleton() { }

        private Singleton() { }

        public static Singleton Instance  {get { return instance; }  }

        public class SecondSingleton
        {
            public Singleton secondInstance;
            public SecondSingleton()
            {
                secondInstance = new Singleton();
                secondInstance.MyProperty = 20;
            }
        }
    }    
    class Program
    {        

        static void Main(string[] args)
        {
            Singleton s1 = Singleton.Instance;
            Singleton.SecondSingleton s2 = new  Singleton.SecondSingleton();

            Console.WriteLine($"s1.MyProperty = {s1.MyProperty}");
            Console.WriteLine($"s2.MyProperty = {s2.secondInstance.MyProperty}");
            Console.ReadLine();           
        }
    }

您正在 SecondSingleton 构造函数中创建新的 Singleton,这意味着 secondInstance != Singleton.Instance。相反,您应该得到 Instance,即:secondInstance = Singleton.Instance;

Asper WIKI:Singleton 将 class 的实例化限制为一个“single”实例。当只需要一个对象来协调整个系统的动作时,这很有用。

你一说"SecondInstance",就打破了格局。