You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中是否存在可用于创建单例类的ISingleton接口?

关于C#中单例模式的实现说明

C#标准类库以及主流第三方库中没有内置的ISingleton接口,你需要自行实现单例类,或者通过依赖注入容器来管理单例的生命周期。

为什么没有ISingleton接口?

单例模式的核心是控制类的实例创建逻辑,而接口仅用于定义行为契约,无法约束类的实例化规则。此外,不同场景下的单例需求差异很大(比如是否需要延迟初始化、是否要保证线程安全等),通用的ISingleton接口无法覆盖所有场景,因此官方并未提供这类接口。

几种常用的单例实现方式

  • 饿汉式(静态初始化,天然线程安全)
    类加载时就创建实例,适合实例占用资源少的场景:

    public sealed class Singleton
    {
        private static readonly Singleton _instance = new Singleton();
    
        // 私有构造函数,阻止外部直接实例化
        private Singleton() {}
    
        public static Singleton Instance => _instance;
    }
    
  • 懒汉式(延迟初始化,线程安全)
    仅在首次访问时创建实例,适合实例占用资源多、不保证会被用到的场景:

    public sealed class Singleton
    {
        private static readonly Lazy<Singleton> _lazyInstance = new Lazy<Singleton>(() => new Singleton());
    
        private Singleton() {}
    
        public static Singleton Instance => _lazyInstance.Value;
    }
    
  • 依赖注入管理(推荐在框架环境中使用)
    如果你在ASP.NET Core等依赖注入环境中开发,无需手动编写单例类,只需在服务注册时指定单例生命周期:

    // 在Program.cs中注册服务
    builder.Services.AddSingleton<IMyService, MyService>();
    

    之后通过构造函数注入IMyService,DI容器会自动维护唯一实例,避免手动管理单例的复杂度。

内容的提问来源于stack exchange,提问作者Dominique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 12:35:17