c#实现单例模式的两种方法(饿汉式、懒汉式)

在C#中,可以使用以下几种方式来实现单例模式:

  1. 饿汉式单例模式(Eager Singleton):

    • 在类加载时就创建实例。
    • 私有化构造函数,防止外部实例化。
    • 提供一个静态的只读属性来获取实例。
    • 代码示例:
    // 在C#中,静态成员在类的构造函数之前被调用。静态成员是在类第一次被使用之前就被初始化的,而类的构造函数是在实例化类的对象时被调用的。
    //静态成员包括静态字段、静态属性和静态方法。它们会在程序运行时,无论是否创建类的实例,都会被初始化和调用
    public class Singleton
    {
        private static readonly Singleton instance = new Singleton();
    
        private Singleton() { }
    
        public static Singleton Instance
        {
            get { return instance; }
        }
    }
    
  2. 懒汉式单例模式(Lazy Singleton):

    • 在需要时才创建实例。
    • 私有化构造函数,防止外部实例化。
    • 使用一个静态变量来保存实例,初始值为null。
    • 提供一个静态的只读属性来获取实例,如果实例为null,则进行实例化。
    • 使用双重锁定(double-checked locking)来确保线程安全。
    • 代码示例:
    public class Singleton
    {
        private static Singleton instance = null;
        private static readonly object lockObj = new object();
    
        private Singleton() { }
    
        public static Singleton Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (lockObj)
                    {
                        if (instance == null)
                        {
                            instance = new Singleton();
                        }
                    }
                }
                return instance;
            }
        }
    }
    

这些是常见的实现单例模式的方式,根据具体的需求和场景选择适合的方式。