Chainet的技术生涯

希望有所进步

博客园 首页 新随笔 联系 订阅 管理

众所周知,Singleton模式是设计模式中比较简单和容易实现的模式之一,对此我就不详细描述其基本原理和用途,只谈谈在.NET中的实现。
MSDN中有专门一篇文章《在 C# 中实现 Singleton》对此进行描述。
其中描述了最简单的实现方式:原始代码

public sealed class Singleton 

   
private static readonly Singleton instance = new Singleton(); 
   
private Singleton(){} 
   
public static Singleton Instance 
   

      
get  
      

         
return instance;  
      }
 
   }
 
}
 

而对于静态构造函数,MSDN中是这样描述的“静态构造函数用于初始化类。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。”参见

一直以来我都不太赞同使用静态构造方法去构建Singleton模式。然而当我用反编译器反编译原始代码之后,大跌眼镜(虽然我没有眼睛),发现反编译出来代码就是用静态构造函数去初试化的。这是反编译出来的结果。
public sealed class Singleton
{
    
private static readonly Singleton instance;
    
private static Singleton()
    
{
         instance 
= new Singleton();
    }

    
private Singleton();
    
public static Singleton Instance 
    

          
get
          
{
                
return Singleton.instance;
          }

    }

    
}

因此我得出结论可以断定,C#中的静态构造函数是实现Singleton模式的。

而对于多线程的环境下,MSDN开发精选2期中对C#实现Singleton模式的文章中也明确表明,.NET framework的机制其实已经保证了用第一种方法实现的Singleton多线程安全,原因是什么呢?文章中没说。
其实就是静态构造函数
posted on 2004-08-13 11:46  Chainet  阅读(1549)  评论(3编辑  收藏  举报