只能生成一个实例的类是实现了Singleton(单例)模式的类。以下为C#实现单例模式的方式。方式一只使用于单线程环境//把构造函数设为私有函数以禁止他人创建实例//定义一个静态的实例在需要的时候创建该实例//在Singlrton的静态属性Instance中只有在instance为null的时候才创建一个实例以避免//重复创建//把构造函数定义为私有函数publicsealedclassSingleton1{publicinta=2;privateSingleton1(){}privatestaticSingleton1instance=null;publicstaticSingleton1Instance{get{if(instance==null)instance=newSingleton1();returninstance;}}}方式二虽然在多线程环境中能工作但效率不高//每次通过属性Instance得到Singleton2的实例都会试图加上一个同步锁//而加锁是一个非常耗时的操作在没有必要的时候应该尽量避免publicsealedclassSingleton2{publicinta=2;privateSingleton2(){}privatestaticreadonlyobjectsyncObj=newobject();privatestaticSingleton2instance=null;publicstaticSingleton2Instance{get{lock(syncObj){if(instance==null)instance=newSingleton2();}returninstance;}}}可行的解法加同步锁前后两次判断实例是否已存在//只有instance为null即没有创建时需要加锁操作。publicsealedclassSingleton3{privateSingleton3(){}privatestaticreadonlyObjectsyncObj=newObject();privatestaticSingleton3instance=null;publicstaticSingleton3Instance{get{if(instance==null){lock(syncObj){if(instance==null)instance=newSingleton3();}}returninstance;}}}推荐的解法一利用静态构造函数//在初始化静态变量instance的时候创建一个实例//由于C#是在调用静态构造函数时初始化静态变量.NET运行时能够确保只调用一次静态构造//函数保证只初始化一次instancepublicsealedclassSingleton4{privateSingleton4(){}privatestaticSingleton4instance=newSingleton4();publicstaticSingleton4Instance{get{returninstance;}}}推荐的解法二实现按需创建实例//在内部定义了一个私有类型Nested。//当第一次用到这个嵌套类的时候会调用静态构造函数创建Singleton5的实例instancepublicsealedclassSingleton5{privateSingleton5(){}publicstaticSingleton5Instance{get{returnNested.instance;}}classNested{staticNested(){}internalstaticreadonlySingleton5instance=newSingleton5();}}扩展定义一个表示总统的类型President可以从该类型继承出FrenchPresident和AmericanPresident等类型。这些派生类型都只能产生一个实例publicclassPresident{privatestringname="";privatestringcountry="";publicPresident(){}publicstringName{get{returnname;}set{name=value;}}publicstringCountry{get{returncountry;}set{country=value;}}}publicsealedclassFrenchPresident:President{privateFrenchPresident():base(){}privatestaticFrenchPresidentinstance=newFrenchPresident();publicstaticFrenchPresidentInstance{get{return(FrenchPresident)(Nested.instance);}}privateclassNested{staticNested(){}internalstaticreadonlyFrenchPresidentinstance=newFrenchPresident();}}publicsealedclassAmericanPresident:President{privateAmericanPresident():base(){}privatestaticAmericanPresidentinstance=newAmericanPresident();publicstaticAmericanPresidentInstance{get{returnNested.instance;}}privateclassNested{staticNested(){}internalstaticreadonlyAmericanPresidentinstance=newAmericanPresident();}}实现泛型单例模式publicclassSingletonExample<T>whereT:class,new(){publicstaticTInstance{get{returnNested.instance;}}privateclassNested{staticNested(){}internalstaticreadonlyTinstance=newT();}}publicclassTwo:SingletonExample<Two>{publicinta=2;publicvoidShow(){Console.WriteLine(a);}}