Singleton
摘自:msdn
/// <summary>
/// 多线程环境下是不安全
/// 执行过程中不同的线程都同时进入instance
/// 那么有可能创建多个Singleton对象实例
/// 并决定必须创建新的实例
/// </summary>
public class Singleton
{
private static Singleton instance;
private Singleton()
{
}
public static Singleton GetInstance()
{
if(null == instance)
{
instance = new Singleton();
}
return instance;
}
}
静态初始化
/// <summary>
/// 静态实例化
/// 避免多线程环境下是不安全
/// 第一次引用类的成员时创建创建实例
/// 公共运行库负责处理变量初始化
/// 通过sealed阻止发生派生,因为派生可能会增加实例
/// </summary>
public sealed class Singleton
{
private static readonly Singleton instance = new Singleton();
private Singleton()
{
}
public static Singleton GetInstance()
{
return instance;
}
}
或者
public sealed class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new object();
private Singleton()
{
}
public static Singleton GetInstance()
{
if(null == instance)
{
lock(syncRoot)
{
if(null == instance)
{
instance = new Singleton();
}
}
}
return instance;
}