1:饑餓模式
public class Class1 { public readonly static Class1 c1 = new Class1();//直接創(chuàng)建一個(gè) //構(gòu)造函數(shù)私有化 禁止其他地方創(chuàng)建實(shí)例 private Class1() { } //對(duì)外提供一個(gè)方法來(lái)返回 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的時(shí)候才加鎖 { lock (objLock)//加鎖 為了 線程安全 { if (c2 == null) { c2 = new Class2(); } } } return c2; } }
3:懶加載進(jìn)階
參考:https://www.cnblogs.com/leolion/p/10241822.html
public sealed class Class3 { //構(gòu)造函數(shù)私有化 //說(shuō)實(shí)話 這種我還不太懂,可以去看看原文 private Class3() { } public static Class3 c3 { get { return GetSign.c3; } } private class GetSign { // 顯式靜態(tài)構(gòu)造告訴C#編譯器 // 未標(biāo)記類型BeforeFieldInit static GetSign() { } internal static readonly Class3 c3 = new Class3(); } }
4:Lazy
public sealed class Class4 { //延遲初始化 // 初始化 System.Lazy`1 類的新實(shí)例。 當(dāng)延遲初始化發(fā)生時(shí),將使用指定的初始化函數(shù)和初始化模式。 //第二個(gè)參數(shù) 表示 線程安全為true //哈哈,我也第一次曉得這個(gè)方式。新奇 private static readonly Lazy<Class4> lazyC4 = new Lazy<Class4>(() => new Class4(),true); public static Class4 c4 { get { return lazyC4.Value; } } private Class4() { } }