全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C#怎么实现单例模式 C#设计模式之单例实现方法

推荐使用Lazy实现单例模式,线程安全且支持延迟初始化;其次可选静态构造函数方式(非延迟);DCL仅用于旧框架兼容。需注意避免滥用、优先考虑DI容器替代。

在C#中实现单例模式,核心是确保一个类只有一个实例,并提供全局访问点。最常用、最推荐的是静态构造函数 + 私有静态只读字段方式(线程安全、简洁、延迟初始化),.NET 4+ 也常用 Lazy 实现。

懒加载 + Lazy(推荐,线程安全且简洁)

利用 .NET 内置的 Lazy 类,天然支持线程安全的延迟初始化,代码清晰易懂:

  • 声明私有静态只读 Lazy 字段
  • 通过属性暴露唯一实例(Value 触发首次创建)
  • 构造函数设为 private,防止外部 new
示例:
public sealed class Singleton
{
    private static readonly Lazy _instance = new Lazy(() => new Singleton());
public static Singleton Instance => _instance.Value;

private Singleton() { } // 禁止外部实例化

}

静态构造函数方式(线程安全,但非延迟加载)

利用 C# 静态构造函数的线程安全特性自动初始化,但会在第一次访问该类型时就创建实例(可能早于实际需要):

  • 私有静态字段直接 new 实例
  • 静态构造函数可省略(若无需额外逻辑),或显式定义以强调初始化时机
  • 同样需 private 构造函数
示例:
public sealed class Singleton
{
    private static readonly Singleton _instance = new Singleton();
static Singleton() { } // 可选:确保类型初始化时执行

public static Singleton Instance => _instance;

private Singleton() { }

}

双重检查锁定(DCL)——兼容旧框架,但不推荐新项目

适用于需严格控制初始化时机且不能用 Lazy 的场景(如 .NET Framework 3.5),但代码较复杂,易出错:

  • volatile 修饰实例字段,防止指令重排
  • 两次判空 + lock,保证仅一次初始化
  • 注意 lock 对象必须是私有静态对象,不可用 this 或类型本身
示例(仅作了解):
public sealed class Singleton
{
    private static volatile Singleton _instance;
    private static readonly object _lock = new object();
public static Singleton Instance
{
    get
    {
        if (_instance == null)
        {
            lock (_lock)
            {
                if (_instance == null)
                    _instance = new Singleton();
            }
        }
        return _instance;
    }
}

private Singleton() { }

}

注意事项与建议

单例不是万能的,使用前请确认是否真有必要:

  • 避免滥用:频繁依赖单例会增加耦合,不利于单元测试和依赖注入
  • 考虑替代方案:现代 C# 项目更推荐用 DI 容器(如 Microsoft.Extensions.DependencyInjection)注册为 Singleton 生命周期
  • 序列化/反序列化时需处理:若支持序列化,应实现 IDeserializationCallback 或标记 [Serializable] 并重写 GetObjectData
  • 继承限制:单例类通常应为 sealed,防止子类破坏唯一性

基本上就这些。对绝大多数 C# 新项目,用 Lazy 是最稳妥、干净的选择。


# 懒加载  # microsoft  # c#  # 延迟加载  # .net  # 子类  # 构造函数  # volatile  # 继承  # private  # 线程  # 对象  # this  # 可选  # 序列化  # 的是  # 加载  # 首次  # 设为  # 推荐使用  # 两次  # 适用于 


相关文章: ppt制作免费网站有哪些,ppt模板免费下载网站?  如何在搬瓦工VPS快速搭建网站?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  平台云上自助建站如何快速打造专业网站?  建站之星2.7模板快速切换与批量管理功能操作指南  如何通过服务器快速搭建网站?完整步骤解析  如何注册花生壳免费域名并搭建个人网站?  如何在IIS中新建站点并解决端口绑定冲突?  常州自助建站工具推荐:低成本搭建与模板选择技巧  网站制作公司,橙子建站是合法的吗?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  如何用好域名打造高点击率的自主建站?  怎么将XML数据可视化 D3.js加载XML  建站之星如何优化SEO以实现高效排名?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  广州营销型建站服务商推荐:技术优势与SEO优化解析  ,怎么在广州志愿者网站注册?  如何确保西部建站助手FTP传输的安全性?  如何通过wdcp面板快速创建网站?  网站制作壁纸教程视频,电脑壁纸网站?  公众号网站制作网页,微信公众号怎么制作?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站之星免费版是否永久可用?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  如何配置WinSCP新建站点的密钥验证步骤?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  如何高效完成自助建站业务培训?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  专业商城网站制作公司有哪些,pi商城官网是哪个?  如何用y主机助手快速搭建网站?  如何通过WDCP绑定主域名及创建子域名站点?  如何快速搭建虚拟主机网站?新手必看指南  建站org新手必看:2024最新搭建流程与模板选择技巧  简历在线制作网站免费,免费下载个人简历的网站是哪些?  建站之星如何一键生成手机站?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  建站为何优先选择香港服务器?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  微信h5制作网站有哪些,免费微信H5页面制作工具?  如何在云服务器上快速搭建个人网站?  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  如何高效搭建专业期货交易平台网站?  如何用低价快速搭建高质量网站?  网站制作服务平台,有什么网站可以发布本地服务信息?  活动邀请函制作网站有哪些,活动邀请函文案?  Python文件管理规范_工程实践说明【指导】  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  如何在腾讯云免费申请建站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。