c# 单例模式 饥饿模式和懒加载模式


1:饥饿模式

public class Class1 { public readonly static Class1 c1 = new Class1();//直接创建一个 //构造函数私有化 禁止其他地方创建实例 private Class1() { } //对外提供一个方法来返回 public static Class1 GetSign() { return c1; } }

2:懒加载


public class Class2 { private static Class2 c2 = null; private readonly static object objLock = new object(); private Class2() { } public static Class2 GetSign() { if (c2 == null)//提高性能 是null的时候才加锁 { lock (objLock)//加锁 为了 线程安全 { if (c2 == null) { c2 = new Class2(); } } } return c2; } }

3:懒加载进阶

参考:https://www.cnblogs.com/leolion/p/10241822.html

public sealed class Class3 { //构造函数私有化 //说实话 这种我还不太懂,可以去看看原文 private Class3() { } public static Class3 c3 { get { return GetSign.c3; } } private class GetSign { // 显式静态构造告诉C#编译器 // 未标记类型BeforeFieldInit static GetSign() { } internal static readonly Class3 c3 = new Class3(); } }

4:Lazy

public sealed class Class4 { //延迟初始化 // 初始化 System.Lazy`1 类的新实例。 当延迟初始化发生时,将使用指定的初始化函数和初始化模式。 //第二个参数 表示 线程安全为true //哈哈,我也第一次晓得这个方式。新奇 private static readonly Lazy lazyC4 = new Lazy(() => new Class4(),true); public static Class4 c4 { get { return lazyC4.Value; } } private Class4() { } }

你可能感兴趣的:(c# 单例模式 饥饿模式和懒加载模式)