今天在博客园看一篇单件模式的文章,有个小疑问,特来向大家请教。
    先贴出该文章地址 http://terrylee.cnblogs.com/archive/2005/12/09/293509.html
有疑问的代码:public sealed class Singleton
{
    static readonly Singleton instance=new Singleton();
 
     static Singleton()
     {
     }
 
     Singleton()
    {
    }    public static Singleton Instance
    {
        get
        {
            return instance;
        }
    }
}
    我的疑问:为什么要写一个static的构造器呢?有一个构造器不就够了么?

解决方案 »

  1.   

    static 就是避免重复的被创建,因为static 不需要实例化
      

  2.   

    用static的构造器是因为instance的修饰符是static。
    要么你全部不用static,要么都用。
      

  3.   

    static的构造器 无用,可以删掉。
      

  4.   

    关于单例模式的几点:
    1.外界不能通过构造函数去new一个对象,构造函数是私有的。
    2.类必须向外界提供一个访问器去获取对象。
    3.任何时候保证只有一个对象的存在。
      

  5.   

    在你这个例子里static构造器没用,不过对于单件模式来说,会定义一个static的实例,就像你这个例子的instance一样,静态的构造器可以用来在普通构造器之前,对静态实例做额外的初始化工作,而且只会进行一次,比如你的例子也可以写成:C# code
    public sealed class Singleton
    {
        static readonly Singleton instance=null;
     
         static Singleton()
         {
               instance=new Singleton();
               //这里还可以写其他的初始化的处理,如果有的话,
         }
     
         Singleton()
        {
        }    public static Singleton Instance
        {
            get
            {
                return instance;
            }
        }
    }
     
    我这样改之后,不同的地方是,如果一直都没有使用单件,则instance一直都不会被创建,保持null,
      

  6.   

    泛型单例:
    http://blog.csdn.net/cloudhsu/article/details/6533678
    这也是一种单例的用法,可参考看看
      

  7.   

    public sealed class Singleton
    {
        static Singleton instance=null; 
        static object LockObject=new object();
          
         Singleton()
        {
        }    public static Singleton Instance
        {
            get
            {
               lock(LockObject)
                {
                  if(instance==null)
                   {
                     instance=new Singleton();
                   }   
                }
                return instance;
            }
        }
    }
      

  8.   

    静态构造函数 是指这个类 第一次被加载到内存(具体点应该是某个AppDomain)中要干的事情但它什么都没有干, 在这里没有意义 可以删掉
      

  9.   

    其实他是想这样写的     static readonly Singleton instance; 
         static Singleton()
         {
             instance = new Singleton();
         }