关于单例模式(C#)

关于单例模式(C#)
http://user.qzone.qq.com/149742606/blog/1392618906
第一种写法:建议不要使用
public   sealed   class  Singleton
{
     private   static  Singleton instance= null ;

     private  Singleton()
    {
    }

     public   static  Singleton Instance
    {
        get
        {
             if  (instance== null )
            {
                instance =  new  Singleton();
            }
             return  instance;
        }
    }
}
这种我们在写代码的时候经常用,殊不知它是非常不安全的。 
 
第二种是安全的:
public   sealed   class  Singleton
{
     private   static  Singleton instance =  null ;
     private   static   readonly   object  padlock =  new   object ();

    Singleton()
    {
    }

     public   static  Singleton Instance
    {
        get
        {
             lock  (padlock)
            {
                 if  (instance ==  null )
                {
                    instance =  new  Singleton();
                }
                 return  instance;
            }
        }
    }
}

第三种也是不安全的,建议不要这样写:
public   sealed   class  Singleton
{
     private   static  Singleton instance =  null ;
     private   static   readonly   object  padlock =  new   object ();

    Singleton()
    {
    }
     public   static  Singleton Instance
    {
        get
        {
             if  (instance ==  null )
            {
                 lock  (padlock)
                {
                     if  (instance ==  null )
                    {
                        instance =  new  Singleton();
                    }
                }
            }
             return  instance;
        }
    }
}

第四种是安全的:
public   sealed   class  Singleton
{
     private   static   readonly  Singleton instance =  new  Singleton();
     static  Singleton()
    {
    }

     private  Singleton()
    {
    }

     public   static  Singleton Instance
    {
        get
        {
             return  instance;
        }
    }
}

第五种写法比较复杂:
public   sealed   class  Singleton
{
     private  Singleton()
    {
    }

     public   static  Singleton Instance { get {  return  Nested.instance; } }
        
     private   class  Nested
    {
         static  Nested()
        {
        }

         internal   static   readonly  Singleton instance =  new  Singleton();
    }
}  

第六种用Net4,是安全的。
public   sealed   class  Singleton
{
     private   static   readonly  Lazy<Singleton> lazy =
         new  Lazy<Singleton>(() =>  new  Singleton());
    
     public   static  Singleton Instance { get {  return  lazy.Value; } }

     private  Singleton()
    {
    }
}  

你可能感兴趣的:(unity)