单例模式(Singleton),目的是保证一个类仅有一个实例,并提供一个访问它的全局访问点
让类自身负责保存他的唯一实例

class Singleton{
	private static Singleton singleton;

	private static readonly object locker=new object();//创建一个静态只读的进程辅助对象

	private Singleton(){}//构造方法设置为private,防止外界利用 new 创建该类实例

	public static Singleton GetSingleton(){ //提供全局唯一访问点

		if(singleton==null){ // 先判断实例是否存在,不存在再加锁处理(双重锁定)保证安全

			lock(locker){ //防止多线程访问创建多个实例
				if(singleton==null){
				singleton = new Singleton();
			}
		}
		return singleton;
	}
}

除了上面这种较为复杂的方式来解决多线程和性能问题,下面还有一种较为简单的实现方式-静态初始化
这种方法不需要开发人员显式的编写线程安全代码,即可解决多线程环境下它是不安全的问题

这种静态初始化的方式是在自己被加载时就将自己实例化,又称之为 饿汉式单例类(提前占用系统资源)

public sealed class Singleton{ //Sealed关键字 阻止发生派生

	private static readonly Singleton singleton = new Singleton(); //在第一次引用类的任何成员时创建实例,公共语言运行库负责处理变量初始化

	private Singleton(){}//构造方法设置为private,防止外界利用 new 创建该类实例

	public static Singleton GetSingleton(){ //提供全局唯一访问点 
		return singleton;
	}
}

第一种单例模式处理方式是要在第一次被引用时,才会将自己实例化,称之为懒汉式单例类

从C#语言角度来讲,饿汉式单例类 已经足够满足我们的需求