单件模式要求一个类有且仅有一个实例,同时提供一个全局的访问点。一般的解决方案是对一个单件对象进行延迟初始化,即当第一次使用这个对象的时候才对这个对象进行初始化! using System;using System.Collections.Generic;using System.Text;using System.Threading;namespace SinglePattern...{ /**//* //---------------静态初始化 不可取,但是可以作为对比来了解------------------------------- /// <summary> /// 第一次引用类的任何成员时创建实例 /// 静态构造函数和实例构造函数之间的区别,因为静态构造函数是由CLR调用执行的,所以静态构造函数只能是一个,同时不能还有参数。 /// 第一, 代码的执行顺序,代码在前的先执行; /// 第二, 静态成员初始化语句要先于静态构造函数执行; /// 第三,静态成员初始化语句与静态构造函数只执行一次。 /// 什么方法来初始化静态成员? /// 第一, 简单静态成员,例如类型为值类型等,使用成员初始化语句来完成; /// 第二, 静态成员初始化比较复杂,或者有可能出现异常,那么用静态构造函数来完成。 /// </summary> public sealed class Singleton { private static readonly Singleton instance; static Singleton() { instance = new Singleton(); } /// <summary> /// 私有的构造函数 /// </summary> Singleton() { } /// <summary> /// 全局访问点 /// </summary> public static Singleton Instance { get { return instance; } } } //-------------------------------------------------------------- */ //---------------延迟初始化------------------------------------- public sealed class Singleton ...{ Singleton() ...{ } public static Singleton Instance ...{ get ...{ return Nested.instance; } } class Nested ...{ internal static readonly Singleton instance; static Nested() ...{ instance = new Singleton(); } } private int num = 0; /**//// <summary> /// 增加 /// </summary> public void Add() ...{ num++; Console.WriteLine("输出:" + num); } } //-------------------------------------------------------------- class Program ...{ public static void Print() ...{ Singleton singleton = Singleton.Instance; lock (singleton) ...{ for (int i = 0; i < 5; i++) ...{ singleton.Add(); } } } static void Main(string[] args) ...{ Thread threadFst = new Thread(new ThreadStart(Print)); threadFst.Name = "Fst"; Thread threadScd = new Thread(new ThreadStart(Print)); threadScd.Name = "Scd"; threadFst.Start(); threadScd.Start(); Console.ReadLine(); } }}