【描述】:Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点
【方式1】
sealed class Singleton { /// <summary> /// 静态只读变量,Instance只会在编译时初始化一次,这就保证了是单例 /// </summary> internal static readonly Singleton Instance = new Singleton(); /// <summary> /// 私有构造函数 /// </summary> private Singleton() { } }
这种方式不能实现延迟初始化(调用时才进行初始化),它在编译时就初始化出了一个实例,sealed保证类不能被继承。
【方式二】
sealed class Singleton { // readonly不会被重新实例化 internal static readonly Singleton Instance = new Singleton(); /// <summary> /// 私有构造函数,防止外部new /// </summary> private Singleton() { } /// <summary> /// 在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类, /// 最多只运行一次 /// </summary> static Singleton() { // 可用于测试什么时候初始化 Console.WriteLine("..."); } }
这种方式通过 静态构造函数 实现了延迟初始化。