`n 在C#中如何实现单例模式?

在C#中如何实现单例模式?

Clock Icon 发布时间:2026/12/5 6:09  · 

在NET/" style="text-decoration: none; color: inherit;" title="C#">C#中实现单例模式的方法有多种,常用的有懒汉式和饿汉式两种。懒汉式是在需要的时候才创建实例,而饿汉式是在类加载的时候就初始化实例。选择适合的方式可以根据具体的需求进行判断。
懒汉式单例实现常见的写法如下:
```csharppublic class Singleton{ private static Singleton instance; private static readonly object padlock = new object(); private Singleton() {} public static Singleton Instance { get { lock (padlock) { if (instance == null) { instance = new Singleton(); } return instance; } } }}```
上述代码中,构造函数是私有的,防止外部创建对象。`Instance`属性在首次被访问时会创建实例,使用`lock`关键字确保线程安全。
饿汉式相对简单一些,实例在类加载时就被创建。例子如下:
```csharppublic class Singleton{ private static readonly Singleton instance = new Singleton(); private Singleton() {} public static Singleton Instance { get { return instance; } }}```
在这个实现中,实例属性在一开始就被初始化,无需担心线程安全的问题,因为静态构造函数会在类首次使用时被调用。
单例模式的实现需要注意内存方面,有些实现可能导致资源浪费,比如在不需要时候却一直占用内存。为了避免这种情况,可以在实现时考虑到懒加载和预加载的权衡。
同时,可能需要考虑到序列化和反序列化的情况,确保在这些操作中仍能保持单例特性。实现可以重写`GetObjectData`等方法。
值得留意的是,在多线程环境中,懒汉式实现特别需要小心。在没有加锁的情况下,可能造成多次实例化,从而破坏单例特性。
以上呈现的几种单例模式的实施方式,无论是懒汉式还是饿汉式,各自有优缺点,应结合具体情况而定,达到程序设计最佳效果。

推荐文章

热门文章