主程序 using System; using System.Text; namespace SafeSingletonDemo { class Program { static void Main(string[] args) { DelayInitialization s1 = DelayInitialization.Instance; DelayInitialization s2 = DelayInitialization.Instance; if (s1 == s2) { Console.WriteLine("{0}与{1}创建了同一个实例!", s1, s2); } Console.ReadLine(); } } } 简单Singleton using System; namespace SafeSingletonDemo { public sealed class OrginalSingleton { private static OrginalSingleton instance; private OrginalSingleton() { } public static OrginalSingleton Instance { get { if (instance == null) { instance = new OrginalSingleton(); } return instance; } } } } 线程安全Singleton using System; namespace SafeSingletonDemo { /// <summary> /// 安全线程单件模式:单重锁定 /// </summary> public sealed class SingleLockedSingleton { private static SingleLockedSingleton instance; private static readonly Object obj = new object(); private SingleLockedSingleton() { } public static SingleLockedSingleton Instance { get { lock (obj) { if (instance == null) { instance = new SingleLockedSingleton(); } return instance; } } } } } 双重加锁Singleton using System; namespace SafeSingletonDemo { /// <summary> /// 安全线程单件模式:双重锁定 /// </summary> public sealed class DoubleLockedSingleton { private static DoubleLockedSingleton instance; private static readonly Object obj = new object(); private DoubleLockedSingleton() { } public static DoubleLockedSingleton Instance { get { if (instance == null) { lock (obj) { if (instance == null) { instance = new DoubleLockedSingleton(); } } } return instance; } } } } 静态初始化Singleton using System; namespace SafeSingletonDemo { public sealed class StaticInitialization { private static readonly StaticInitialization instance = new StaticInitialization(); private StaticInitialization() { } public static StaticInitialization Instance { get { return instance; } } } } 延迟初始化Singleton using System; namespace SafeSingletonDemo { public sealed class DelayInitialization { DelayInitialization() { } public static DelayInitialization Instance { get { return Nested.instance; } } class Nested { static Nested() { } internal static readonly DelayInitialization instance = new DelayInitialization(); } } }