惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
Apple Machine Learning Research
Apple Machine Learning Research
Hugging Face - Blog
Hugging Face - Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
B
Blog
月光博客
月光博客
博客园 - 【当耐特】
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Jina AI
Jina AI
博客园 - Franky
MyScale Blog
MyScale Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Last Week in AI
Last Week in AI
B
Blog RSS Feed
H
Help Net Security

博客园 - vidorlee

GitHub退款申请经验分享 C# 如何避免在基类中实现所有接口同时也不让每个子类重复实现 CoreXY运动结构工作原理 最佳的实现Winfrom无边框四周阴影方案 在VS2022上安装pygame模块 漫谈Winform控件优化之圆角矩形边框处理 C#中设置自定义控件工具箱图标 讨论TableLayoutPanel加载缓慢和闪烁问题解决方案 关闭Windows 10自动更新的方法 MVVM模式开发WinForm-ReactiveUI TensorFlow基本使用教程 C#自定义事件的写法 C#多线程Task创建 PropertyChanged.Fody自动通知属性插件 5、Pico Robot 机器人课程 4、Pico Robot 传感器进阶课程 3、Pico Robot 基础开发课程 2、Pico Robot 开发环境搭建 1、Pico Robot 智能小车平台介绍
C#单例模式的用途
vidorlee · 2024-06-07 · via 博客园 - vidorlee

单例模式是一种常用的设计模式,在C#中同样适用。单例模式确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。以下是单例模式的一些主要用途:

  1. 控制资源使用:当某个类的对象需要频繁创建和销毁时,使用单例模式可以减少资源消耗,比如数据库连接池。

  2. 全局状态管理:当需要在应用程序的多个部分之间共享状态时,单例模式可以提供一种集中管理状态的方式。

  3. 配置管理:应用程序可能需要一个配置管理器,用于存储和访问配置信息,单例模式可以确保配置信息的一致性。

  4. 日志记录:日志记录器通常需要全局访问,以便在应用程序的任何地方记录信息,单例模式可以确保日志记录器的全局唯一性。

  5. 线程安全:在多线程环境中,单例模式可以确保类实例的线程安全,避免多个线程同时创建多个实例。

  6. 避免重复实例化:如果实例化一个对象需要消耗大量资源(如I/O操作、内存占用等),单例模式可以避免重复创建对象。

  7. 依赖注入:在依赖注入框架中,单例模式可以确保依赖项在整个应用程序生命周期内只被创建一次。

  8. 性能优化:对于性能敏感的应用,单例模式可以减少对象创建的开销,提高程序的运行效率。

单例模式的实现通常涉及将构造函数设为私有,以防止外部通过new关键字创建新实例,并通过一个静态方法或属性来提供全局访问点。在C#中,可以通过静态构造函数、静态属性或者锁机制来实现线程安全的单例模式。

在C#中实现单例模式的一个常见方法是使用静态属性来控制实例的创建。以下是一个简单的单例模式示例:例模式,例如使用静态初始化或使用 Lazy<T> 类。

 1 public class Singleton
 2 {
 3     // 私有静态字段,用于保存类的唯一实例
 4     private static Singleton _instance;
 5 
 6     // 私有构造函数,防止外部通过new关键字创建实例
 7     private Singleton()
 8     {
 9     }
10 
11     // 公共静态属性,用于获取类的唯一实例
12     public static Singleton Instance
13     {
14         get
15         {
16             // 线程安全检查,确保只创建一次实例
17             if (_instance == null)
18             {
19                 // 使用lock防止多线程环境下的竞态条件
20                 lock (typeof(Singleton))
21                 {
22                     // 再次检查_instance,确保即使多个线程通过了第一个检查,也只有一个实例被创建
23                     if (_instance == null)
24                     {
25                         _instance = new Singleton();
26                     }
27                 }
28             }
29             return _instance;
30         }
31     }
32 
33     // 类的其他方法和属性
34     public void DoSomething()
35     {
36         Console.WriteLine("Doing something...");
37     }
38 }