首页 > 编程语言 >C#单例模式的简单使用

C#单例模式的简单使用

时间:2022-11-20 21:04:50浏览次数:39  
标签:null Service C# 替换成 static private 单例 模式 类名


单例模式示例:

public sealed class WindowService
{
//定义一个私有的静态全局变量来保存该类的唯一实例
private static WindowService Service;
//定义一个只读静态对象
//且这个对象是在程序运行时创建的
private static readonly object syncObject = new object();
/// <summary>
/// 构造函数必须是私有的
/// 这样在外部便无法使用 new 来创建该类的实例
/// </summary>
private WindowService()
{ }
/// <summary>
/// 定义一个全局访问点
/// 设置为静态方法
/// 则在类的外部便无需实例化就可以调用该方法
/// </summary>
/// <returns></returns>
public static WindowService GetInstance()
{
//这里可以保证只实例化一次
//即在第一次调用时实例化
//以后调用便不会再实例化
//第一重 singleton == null
if (Service == null)
{
lock (syncObject)
{
//第二重 singleton == null
if (Service == null)
{
Service = new WindowService();
}
}
}
return Service;
}
}

精简一下代码

#region 单例模式
private static 替换成类名 _替换成类名;
private static readonly object syncObject = new object();
private 替换成类名() { }
public static 替换成类名 GetInstance()
{
if (_替换成类名 == null)
lock (syncObject)
if (_替换成类名 == null)
_替换成类名 = new 替换成类名();
return _替换成类名;
}
#endregion


标签:null,Service,C#,替换成,static,private,单例,模式,类名
From: https://blog.51cto.com/yuzhyn/5872026

相关文章

  • C# 读取照片的EXIF信息
    一、使用MetadataExtractor读取EXIF信息1、NuGet中安装在NuGet中搜索并安装MetadataExtractor;2、包信息我安装后会有两个包:MetadataExtractor2.0.0和XmpCore5.1......
  • RV-LINK:Eclipse 使用 RV-LINK 调试 RISC-V 程序
    RV-LINK项目主页:​​https://gitee.com/zoomdy/RV-LINK​​​最新的文档请访问:​​https://gitee.com/zoomdy/RV-LINK/wikis​​,这里的内容可能没有及时更新。前期准备按......
  • RV-LINK:将 Longan Nano 开发板变成 RISC-V 仿真器
    实物图右边红色小板子是作为仿真器的LonganNano,左边蓝色大板子是GD32VF103V-EVAL开发板。下载GD32MCUDfuTool到这里​​http://gd32mcu.21ic.com/documents/index/......
  • RV-LINK:将 GD32VF103C-START 开发板变成 RISCV-V 仿真器
    实物图左边是作为仿真器的GD32VF103C-START,右边是GD32VF103V-EVAL开发板。下载GD32MCUDfuTool到这里​​http://gd32mcu.21ic.com/documents/index/classify_id/7​......
  • Windows server 2016 安装oracle的教程图解
    这篇文章主要介绍了Windowsserver2016安装oracle的教程图解,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.安装oracleOracle的......
  • eCos中的同步原语简要
    信号量信号量是最基本的通信原语,可用于线程同步、事件通知、共享数据保护,包括二值信号量和计数信号量,在非嵌入式系统中,信号量还被用于进程间通信。eCos的计数信号量包含了两......
  • eCos仿真目标机(2)――安装
    宿主机软件为了获得仿真目标机的完整功能,用户必须编译安装I/O辅助进程ecosynth以及其它支持文件。没有辅助进程的情况下开发仿真目标机应用也是可以的,但是仅有少量的I/O设备......
  • 为仿真器添加eCos多线程调试支持,GDBServer Extender 0.0.1 使用说明
    可以使用RedBoot或者仿真器调试eCos系统,RedBoot集成的GDBStubs已经支持eCos的多线程调试,使用GDB命令infothreads就可以读取当前的线程状态。但是使用仿真器时,由于仿真器不......
  • P8196 [传智杯 #4 决赛] 三元组 ----- 数组与vector
    题目描述给定一个长度为 nn 的数列 aa,对于一个有序整数三元组 (i,j,k)(i,j,k),若其满足 1\leqi\leqj\leqk\leqn1≤i≤j≤k≤n 并且 a_i+a_j=a_kai​+......
  • 利用xmake在c++项目中编译与调用webassmebly
    最近在尝试用webassembly替代lua作为c++程序的脚本。刚好xmake也支持了webassembly的编译。下面是踩坑记录。项目需要两个target:一个c++项目、一个webassembly项目。需要......