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

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签