首页 > 编程语言 >C#单例类

C#单例类

时间:2023-04-22 11:11:53浏览次数:40  
标签:Singleton C# private instance static 单例 public

兼顾线程安全常用以下三种写法:

public sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();

    // 显式静态构造器告诉C#编译器
    // 不要将类型标记为BeforeFieldInit
     // Explicit static constructor to tell C# compiler 
// not to mark type as beforefieldinit
    static Singleton()
    {
    }

    private Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            return instance;
        }
    }
}


 

public sealed class Singleton
{
    private static readonly Lazy<Singleton> lazy =
        new Lazy<Singleton>(() => new Singleton());
    
    public static Singleton Instance { get { return lazy.Value; } }

    private Singleton()
    {
    }
}

 

public sealed class Singleton
{
    private static Singleton instance = null;
    private static readonly object padlock = new object();

    Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            lock (padlock)
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
        }
    }
}

Implementing the Singleton Pattern in C# (csharpindepth.com)

Articles (csharpindepth.com)

以上来自C# in Depth 作者的博客资源

标签:Singleton,C#,private,instance,static,单例,public
From: https://www.cnblogs.com/thingk/p/17342628.html

相关文章

  • docker 安装portainer
    portainer定义portainer是一个可视化docker操作工具,可以不用写docker命令实现容器的生命周期进行管理,方便的实现容器的创建、运行、停止、暂停、恢复、删除、复制等。卸载已安装的portainer1.通过dockercontainerls命令查看正在运行的容器。找到portainer对应的names。2.......
  • TypeScript 的实用技巧
    TypeScript的实用技巧类型别名和接口:使用类型别名或接口可以定义复杂的数据类型,提高代码的可读性和可维护性。泛型:使用泛型可以提高代码的复用性,使代码更加灵活。非空断言操作符(!):当开发者确定一个变量或属性不为null或undefined时,可以使用非空断言操作符(!)来告诉编译......
  • Java:LocalDateTime获取今天的开始时间和结束时间
    代码示例LocalDateTimenow=LocalDateTime.now();intyear=now.getYear();intmonth=now.getMonthValue();intday=now.getDayOfMonth();System.out.println(String.format("%d-%d-%d",year,month,day));//2023-4-21LocalDateTimestartTime=Loca......
  • 12、Argo rollouts结合Ingress Nginx进行Canary流量迁移
    Argorollouts结合IngressNginx进行Canary流量迁移Istio环境中支持两种流量分割模式◼更新期间,使用不同的Service分别承载新旧版本的流量◆Canary和Stable版本分别对应一个独立的Service⚫canaryService:待发布的新版本⚫stableService:待更新的......
  • 微信小程序:uni-app页面Page和组件Component生命周期执行的先后顺序
    目录H5微信小程序测试代码文档页面生命周期https://uniapp.dcloud.net.cn/tutorial/page.html#lifecycle组件生命周期https://uniapp.dcloud.net.cn/tutorial/page.html#componentlifecycle经测试,得出结论:H5和微信小程序的生命周期函数调用顺序不一致H5pagebeforeCreatepag......
  • Yolov5_DeepSort_Pytorch:基于 Yolov5 + Deep Sort 的实时多目标跟踪器
    Yolov5_DeepSort_Pytorch:基于Yolov5+DeepSort的实时多目标跟踪器 视界君 Python视界 昨天Python视界分享简介该存储库包含一个两阶段跟踪器。YOLOv5(一系列在COCO数据集上预训练的对象检测架构和模型)生成的检测被传递到跟踪对象的DeepSort算法。它可以跟踪Yolov5模型......
  • chatGPT对软件测试人员的冲击和影响
    目前大家都清楚类似chatGPT生成式人工智能的解决方案的大热,作为软件测试人员,或者相关行业的从业人员,需要思考的问题是,我们需要怎样持续学习来应对这种产业升级或者是类似新的技术迭代。 据我的感觉类似chatGPT的人工智能已经对软件测试人员的工作方式和职责产生了重大影响。以下是......
  • SpringSecurity完整流程、如何查看具体的过滤器
    SpringSecurity完整流程SpringSecurity的原理其实就是一个过滤器链,内部包含了提供各种功能的过滤器。这里我们可以看看入门案例中的过滤器。 图中只展示了核心过滤器,其它的非核心过滤器并没有在图中展示。UsernamePasswordAuthenticationFilter:负责处理我们再登录页面填写了......
  • Ceph Pacific 各版本镜像说明
    16.2.11容器镜像root@ubuntu-20-04-lts:~#dockerimagesREPOSITORY            TAG    IMAGEID   CREATED    SIZEregistry             2     0d153fadf70b 2monthsago  ......
  • C 语言中常用占位符的作用
    在C语言中,占位符用于格式化输出,在输出时会被具体的值所替换。以下是C语言中常用的占位符以及它们所表示的意思: %d-整数占位符,用于输出带符号十进制整数。例如:%d,-123。 %u-无符号整数占位符,用于输出不带符号十进制整数。例如:%u,456。 %f-浮点数占位符,用于输出小......