本帖最后由 w19891130 于 2012-09-29 13:10:54 编辑

解决方案 »

  1.   

    这是一个蹩脚的套用“单例模式”的代码,更糟糕的是,这代码本身就是有问题的(参考CLR via C#中关于Double Check Lock的那一章)。之所以这样,是因为在Java和早期的C#中不支持静态类,所以才使用这么蹩脚的设计。
      

  2.   

    你的这段代码是singleton设计模式的c#实现。
    这个设计模式可以保证整个程序里只有一个GameUserCacheInstance类的实例而你说的把类做成静态类,看上去和singleton差不多,但是有一个重要的区别:
    singleton是创建一个类的唯一实例,这个实例可以具有面向对象的所有特性,比如多态、封装、继承。比如说,GameUserCacheInstance可以选择从XXXCache类继承下来,同时实现IXXXComparable接口
    静态类只能包括静态成员,比如static variables, static methods,无非从其它类继承。----PS,你的这个GameUserCacheInstance最好加上sealed关键字
      

  3.   

    正如楼上所说,对于非继承的情况,单例模式根本不需要,但是又和楼上有不同,楼上说最好加上sealed关键字,其实刚好相反,这里最好做出abstract(抽象类),让各种类继承它,而它内部的单例永远不是自己本身(抽象类不可能实例化),永远只能是它的派生类。这样的单例模式就实现了多态的需求。不过楼主你给的例子真应该用静态类替代,完全没必要搞成那样。