C#实现单例模式的6种方法小结

1. 饿汉式

饿汉式是最简单的实现单例模式的方法之一。在程序启动时就创建实例对象,并且始终只创建一个实例,在需要使用该实例时直接返回即可。

public class Singleton

{

private static Singleton instance = new Singleton();

private Singleton() { }

public static Singleton Instance

{

get { return instance; }

}

}

2. 懒汉式(非线程安全)

懒汉式是在需要使用实例对象时才创建的方式,这种方式在多线程环境下是不安全的,可能会创建多个实例。

public class Singleton

{

private static Singleton instance;

private Singleton() { }

public static Singleton Instance

{

get

{

if (instance == null)

{

instance = new Singleton();

}

return instance;

}

}

}

3. 懒汉式(线程安全)

为了解决懒汉式的线程安全问题,可以使用加锁的方式确保只有一个线程可以创建实例。

public class Singleton

{

private static Singleton instance;

private static readonly object lockObj = new object();

private Singleton() { }

public static Singleton Instance

{

get

{

lock (lockObj)

{

if (instance == null)

{

instance = new Singleton();

}

}

return instance;

}

}

}

4. 双重锁定

双重锁定是懒汉式的一种优化方式,通过先判断实例是否已经创建,避免了每次获取实例都需要加锁的性能损耗。

public class Singleton

{

private static Singleton instance;

private static readonly object lockObj = new object();

private Singleton() { }

public static Singleton Instance

{

get

{

if (instance == null)

{

lock (lockObj)

{

if (instance == null)

{

instance = new Singleton();

}

}

}

return instance;

}

}

}

5. 延迟初始化

延迟初始化是懒汉式的一种改进方法,使用Lazy类来延迟实例的创建,可以在需要使用实例时再进行初始化。

public class Singleton

{

private static readonly Lazy lazyInstance =

new Lazy(() => new Singleton());

private Singleton() { }

public static Singleton Instance

{

get { return lazyInstance.Value; }

}

}

6. 使用静态构造函数

使用静态构造函数是一种更加简洁的实现单例模式的方式,静态构造函数在整个生命周期中只会执行一次,可以保证只创建一个实例。

public class Singleton

{

private static readonly Singleton instance = new Singleton();

static Singleton() { }

private Singleton() { }

public static Singleton Instance

{

get { return instance; }

}

}

上述是C#实现单例模式的六种方法的小结。其中饿汉式和静态构造函数可以保证线程安全,其他方法需要在多线程环境下额外进行安全措施。根据实际需求和性能要求,选择合适的单例模式实现方式。

后端开发标签