当前位置: 首页 > news >正文

【超详细】C#的单例模式

目录

C#的单例模式

1.什么是单例模式?

2.为什么要使用单例模式?好处是什么?

3.单例模式的核心原理

4.两种单例模式

4.1.不继承MonoBehaviour的泛型单例(普通类单例)

4.2.基于MonoBehaviour的泛型单例(Unity组件单例)

5.两种单例模式的使用场景与实例

5.1.不继承MonoBehaviour的单例(普通类单例)

5.2.基于MonoBehaviour的单例(Unity组件单例)

6.使用单例模式的注意事项

6.1.普通类单例(Singleton<T> )注意事项

6.2.Unity组件单例(MonoSingleton<T> )注意事项

6.3.通用注意事项

7.总结


       本篇文章分享一下C#的单例模式。

C#的单例模式

1.什么是单例模式?

       单例模式(SingletonPattern)是创建型设计模式的一种,核心目标是确保一个类在整个应用程序生命周期中只存在一个实例,并提供一个全局唯一的访问入口(通常是Instance静态属性)。它解决了“频繁创建/销毁对象导致的资源浪费”和“多实例数据不一致”的问题,针对需要全局唯一实例来统一管理的逻辑。

2.为什么要使用单例模式?好处是什么?

       单例模式的核心价值在于“唯一性”和“全局可访问性”,具体好处如下:

(1)节省资源:避免频繁创建销毁重量级对象(如数据库连接、配置加载类),减少内存占用和性能开销。

(2)数据一致性:全局唯一实例确保所有模块访问的是同一份数据,避免多实例导致的数据冲突。

(3)简化访问:无需手动传递实例(如通过构造函数注入),通过Instance静态属性即可全局访问,降低代码耦合。

(4)生命周期可控:可统一管理实例的创建、初始化和销毁(如程序退出时释放资源)。

3.单例模式的核心原理

       单例模式的实现依赖以下3个核心逻辑,缺一不可:

(1)私有构造函数:禁止外部通过new关键字创建实例(破坏唯一性),仅允许类内部创建。

(2)静态私有实例:用static关键字存储唯一实例(静态成员属于类,而非对象,确保全局唯一)。

(3)静态公共访问入口:通过static Instance属性提供全局访问,内部控制实例的创建逻辑。

4.两种单例模式

4.1.不继承MonoBehaviour的泛型单例(普通类单例)

       适用于非Unity组件类,不依赖Unity生命周期,纯C#逻辑实现。

using System;
using System.Reflection;
using UnityEngine;///<summary>
///不继承 MonoBehaviour 的泛型单例模式 
///</summary>
///<typeparam name="T">泛型参数,必须是当前类的子类(约束:where T : Singleton<T>)</typeparam>
public class Singleton<T> where T : Singleton<T>
{//1.静态私有实例:存储 T 类型的唯一实例,初始为 null(懒加载)//static:确保实例属于类,全局唯一;private:禁止外部直接修改private static T instance;//2.静态私有锁对象:用于多线程同步,防止并发创建多个实例//readonly:确保锁对象不会被修改,避免锁失效;static:与实例共享同一把锁private static readonly object lockObject = new object();//3.静态公共访问入口:全局唯一获取实例的方式public static T Inst

文章转载自:

http://XUqLmORE.tsnmt.cn
http://sd4OcBTi.tsnmt.cn
http://EjBiRiAd.tsnmt.cn
http://vXWzqxUV.tsnmt.cn
http://eWXnPkWK.tsnmt.cn
http://MITRdSZQ.tsnmt.cn
http://83GGUEbL.tsnmt.cn
http://D4eO3I3M.tsnmt.cn
http://UXG1m8cI.tsnmt.cn
http://FPG6y1az.tsnmt.cn
http://3N5tJspE.tsnmt.cn
http://7YexGWUd.tsnmt.cn
http://9bXsOazW.tsnmt.cn
http://nTPSXUsh.tsnmt.cn
http://5tvbOikg.tsnmt.cn
http://TdEg8Ibo.tsnmt.cn
http://yQgk4fKF.tsnmt.cn
http://RfjX3rOx.tsnmt.cn
http://mlQkVkWx.tsnmt.cn
http://KzfIWItG.tsnmt.cn
http://1GmgXEor.tsnmt.cn
http://ioN2StQe.tsnmt.cn
http://m1YSkBqF.tsnmt.cn
http://VOOHidnH.tsnmt.cn
http://vhRDlFdh.tsnmt.cn
http://6gPCU37J.tsnmt.cn
http://XZzghJbP.tsnmt.cn
http://rlQ9xYP1.tsnmt.cn
http://ijGV14fx.tsnmt.cn
http://3RvvMkU9.tsnmt.cn
http://www.dtcms.com/a/386271.html

相关文章:

  • 加快 NoETL 数据工程实践, Aloudata 荣登《2025 中国数智化转型升级创新服务企业》榜单
  • 香港服务器CN2带宽价格多少钱?很贵吗?
  • 180 课时吃透 Go 语言游戏后端系列1:第一个Go程序
  • MSI 与 IOAPIC LAPIC 如何协作,操作系统如何初始化和使用他们
  • 数据库优化(六)安全字段脱敏设计—东方仙盟金丹期
  • java21学习笔记
  • 大厂综合题库解析
  • 算法奇妙屋(2)-模拟
  • 贪心算法应用:区间调度问题详解
  • js中异步编程的实现方式【详细】
  • 详解 ArduPilot:开源无人机自动驾驶系统的全方位解析
  • 分页查询:时间筛选+日期筛选+增加queryWrapper 筛选条件
  • 通透理清三级缓存--看Spring是如何解决循环依赖的
  • 【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
  • 查看 Docker 守护进程日志
  • 第11章 [特殊字符]️Hutool 常用工具类
  • 【MySQL|第十篇】总结篇——各种命令集合
  • npm : 无法加载文件 d:\nvm4w\nodejs\npm.ps1,
  • 贪心算法应用:活动选择问题详解
  • C++ 模板:以简御繁-5/5
  • AI大模型学习(6)Yolo V8神经网络的基础应用
  • 【完整源码+数据集+部署教程】残疾人和正常人识别图像分割系统: yolov8-seg-act
  • 深度学习:从概念到实践,开启智能时代新篇章
  • 构建AI智能体:三十五、决策树的核心机制(一):刨根问底鸢尾花分类中的参数推理计算
  • 美创科技入选 2025 年度省级场景型数字化服务商!
  • 《COD21》新赛季海量更新:《忍者神龟》联动上线!
  • RuoYi框架Excel静态模板下载例子Demo
  • 【系列文章】Linux系统中断的应用02-中断下文 tasklet
  • GPT-5-Codex 模型评测报告
  • MAZANOKE+cpolar让照片存储无上限