新闻中心
C#如何实现单例模式 C#设计模式之单例模式的几种写法
单例模式确保类唯一实例,C#中常用实现包括:简单非线程安全、双重检查锁定、静态构造函数、嵌套类延迟加载及Lazy方式;其中Lazy因线程安全、延迟加载且简洁,为现代推荐写法。

单例模式确保一个类只有一个实例,并提供一个全局访问点。在C#中,有多种实现方式,各有优缺点,适用于不同场景。以下是几种常见的写法。
1. 简单单线程版本(不推荐用于多线程)
这种写法最简单,但在多线程环境下可能创建多个实例,不安全。
public class Singleton
{
private static Singleton instance;
<pre class='brush:php;toolbar:false;'>private Singleton() { }
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}}
php 配置文件php.ini的中文注释版(09.4)
在WINDOWS下,编译时的路径是WINDOWS安装目录。
; 在命令行模式下,PHP.INI的查找路径可以用 -C 参数替代。
; 该文件的语法非常简单。空白字符和用分号&ACUTE;;&ACUTE;开始的行被简单地忽略(就象
你可能
; 猜到的一样)。 章节标题(例如 : [FOO])也被简单地忽略,即使将来它们可能
; 有某种的意义。
;
;
449
查看详情
说明:构造函数私有,通过静态属性获取唯一实例。但多线程同时调用时,可能多次进入if判断,导致重复创建。
2. 线程安全的双重检查锁定(常用推荐)
使用锁机制和双重检查,既保证线程安全,又提升性能。
public class Singleton
{
private static volatile Singleton instance;
private static readonly object lockObject = new object();
<pre class='brush:php;toolbar:false;'>private Singleton() { }
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (lockObject)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}}
说明:volatile防止指令重排序,lock确保同一时间只有一个线程能创建实例,双重if减少锁竞争。
3. 静态构造函数方式(CLR保证线程安全)
利用C#静态构造函数只执行一次的特性,实现简洁且线程安全的单例。
public class Singleton
{
private static readonly Singleton instance = new Singleton();
<pre class='brush:php;toolbar:false;'>static Singleton() { }
private Singleton() { }
public static Singleton Instance => instance;}
说明:静态字段初始化在静态构造函数中执行,.NET运行时保证其线程安全,代码简洁,延迟初始化无法控制(在首次访问类成员时即初始化)。
4. 嵌套类实现延迟加载(推荐)
通过嵌套私有类实现真正的延迟加载,且线程安全。
public class Singleton
{
private Singleton() { }
<pre class='brush:php;toolbar:false;'>public static Singleton Instance => Nested.instance;
private class Nested
{
static Nested() { }
internal static readonly Singleton instance = new Singleton();
}}
说明:嵌套类的静态成员只在第一次访问时初始化,.NET自动处理线程安全,实现延迟加载,是兼顾性能与安全的好方法。
5. 使用Lazy(现代推荐写法)
C# 4.0引入的Lazy类型,专为延迟初始化设计。
public class Singleton
{
private static readonly Lazy<Singleton> lazy =
new Lazy<Singleton>(() => new Singleton());
<pre class='brush:php;toolbar:false;'>private Singleton() { }
public static Singleton Instance => lazy.Value;}
说明:Lazy
基本上就这些常见写法。选择哪种取决于是否需要延迟加载、性能要求以及框架版本。对于新项目,优先考虑Lazy方式。
以上就是C#如何实现单例模式 C#设计模式之单例模式的几种写法的详细内容,更多请关注其它相关文章!
# 什么用
# 网站优化与推广论文
# 商家排名规则seo
# 网站顶部区如何优化
# 青岛网站建设官网推荐
# 陈村狮山网站建设
# 策划营销推广文案模板
# 营销网站建设业务
# 沈阳营销推广获客系统
# 兼职推广app网站大全
# 薯条营销推广在哪里接单
# 扁平化
# 单例模式
# 如何使用
# 表单
# 只有一个
# 如何实现
# 配置文件
# 几种
# 多线程
# 加载
# .net
# 延迟加载
# c#
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
在Go Martini框架中高效服务动态生成图像的实践指南
Descript怎样用AI剪辑自动去噪_Descript用AI剪辑自动去噪【自动降噪】
抖音小游戏合成大西瓜免费秒玩入口链接 抖音小游戏热门合集秒玩网站
Go语言中对Map值调用带指针接收者方法:原理与最佳实践
C++如何解决segmentation fault_C++段错误调试与原因分析
怎么去除衣服上的口红印_生活小妙招教你用酒精轻松擦除
格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施
文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】
德邦快递查询平台 德邦快递物流信息查询入口
离线运行Go语言之旅:本地部署与GOPATH配置指南
React/Next.js中实现列表项的动态移动与状态管理:兼论唯一键的重要性
Golang如何实现简单的Web表单_Golang表单提交与验证处理方法
机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等
在J*a中如何开发简易博客标签推荐系统_博客标签推荐项目实战解析
拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧
狙击外星人小游戏开始_狙击外星人小游戏立即开始
大象笔记网页版入口 印象笔记网页版登录入口
163邮箱官方主页登录 直达网易邮箱登录核心页面
搜狗浏览器如何使用密码生成器创建强密码 搜狗浏览器内置密码安全工具
J*aScript map 方法中处理循环元素为空数组的策略
小红书怎么解除第三方平台绑定_小红书多平台登录解绑方法介绍
如何设置Windows Defender的定时扫描_计划任务实现自动杀毒【安全】
Python中如何避免重复条件判断:利用数据结构实现动态逻辑
windows10怎么查看硬盘序列号_windows10硬盘id查询命令
163邮箱登录密码 163邮箱忘记密码找回
动漫共和国防屏蔽稳定域名-动漫共和国官方正版直达通道
深入理解J*aScript Promise异步执行与微任务队列
win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】
如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单
c++如何使用TBB库进行任务并行_c++ Intel线程构建模块
Node.js CSV 数据处理:基于字段空值条件过滤整条记录的策略
俄罗斯Yandex免登录入口_Yandex搜索引擎官网一键直达
抖音网页版平台入口 抖音网页版官网在线访问教程
探索高级语言到原生C/C++的转译:挑战与内存管理策略
顺丰快递查询系统 官方正版查询入口
不会效仿卡普空!《铁拳》制作人澄清:不采取赛事付费|直播|
Gmail邮箱申请注册直达_Gmail邮箱免费注册PC版官网入口2025
腾讯视频怎么举报不良内容_腾讯视频内容举报流程与违规信息处理方法
深入理解J*a编译器的兼容性选项:从-source到--release
火狐浏览器占用内存高卡顿怎么办 火狐浏览器性能优化设置技巧
J*aScript:在map操作中高效处理空数组
Win11 USB传输速度慢怎么解决 Win11 USB驱动更新与设置
React Hooks最佳实践:动态组件状态管理的组件化方案
漫蛙漫画网页端入口 漫蛙2官方正版漫画站点
微博网页版怎么开启两步验证_微博网页版账号安全两步验证设置方法
PHP表单数据传递:如何通过隐藏输入字段获取动态ID
12306选座如何查看座位示意图_12306座位示意图解读与使用
b站赚钱渠道_b站收益来源
如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践
外媒分析《GTA6》定价:卖100美元可以但真没必要!


2025-11-07
浏览次数:次
返回列表