C# 单例模式的两种简易写法
记录一下,以防遗忘
1 /// <summary> 2 /// 饿汉式声明 静态构造函数执行时就立即实例化 3 /// </summary> 4 public class SingleInstance 5 { 6 /// <summary> 7 /// 私有构造函数 8 /// </summary> 9 private SingleInstance() 10 { 11 } 12 13 //注意,为了确保单例性,需要使用 readonly 关键字声明实例不能被修改。 14 private static readonly SingleInstance _instance = new SingleInstance(); 15 16 public static SingleInstance Instance => _instance; 17 } 18 19 /// <summary> 20 /// 懒汉式声明 程序执行过程中第一次需要时再实例化 21 /// </summary> 22 public class LazySingleInstance 23 { 24 /// <summary> 25 /// 私有构造函数 26 /// </summary> 27 private LazySingleInstance() 28 { 29 } 30 31 //使用 Lazy<T> 可以使对象的实例化延迟到第一次被调用的时候执行, 32 //通过访问它的 Value 属性来创建并获取实例, 33 //并且读取一个 Lazy<T> 实例的 Value 属性只会执行一次实例化代码,确保了线程安全。 34 private static readonly Lazy<LazySingleInstance> _instance = new Lazy<LazySingleInstance>(() => new LazySingleInstance()); 35 36 public static LazySingleInstance Instance => _instance.Value; 37 }