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

一文读懂 C# 中的 Lazy<T>

一文读懂 C# 中的 Lazy

  • 一、Lazy<T> 是什么
  • 二、推荐应用场景
  • 三、实战 Demo
    • 基础用法
    • 进阶用法:单例模式的实现
      • 单例类
      • 使用单例类
  • 四、核心方法和属性阐释
    • LazyThreadSafetyMode 枚举值
    • 构造函数
    • 常用属性
  • 五、避坑指南、注意事项
  • 六、总结与决策

一文读懂 C# 中的 Lazy

在 C# 编程中,有时我们希望某个对象的初始化过程延迟到真正需要使用它的时候,这样可以提高程序的性能,减少不必要的资源占用。Lazy 类型就为我们提供了这样的功能

一、Lazy 是什么

Lazy 是 C# 中用于延迟初始化的类型。其核心作用就是将对象的创建推迟到首次访问该对象的时候,而不是在声明变量时就进行创建。有以下特点:

  • 延迟性:就像你有个任务,但你可以选择在真正要用到这个任务结果的时候才去执行它,而不是一开始就着手去做。Lazy 允许我们把对象的初始化操作推迟到首次访问 Value 属性的时候
  • 线程安全性:Lazy 提供了不同级别的线程安全模式,可以确保在多线程环境下对象的正确初始化和访问

Lazy 自.NET Framework 4.0 开始引入。后续版本核心功能稳定,无重大功能或用法变化。只要项目基于.NET Framework 4.0 及以上版本,都能正常使用

二、推荐应用场景

Lazy虽然强大,但并非所有场景都适用。以下这些场景尤其适合它发挥优势:

  • 数据库连接:数据库连接的建立通常开销较大。使用 Lazy 可以在真正需要执行数据库操作时才创建连接,避免程序启动时就占用过多资源
  • 大型对象创建:比如创建一个庞大的配置对象,初始化过程复杂且可能在程序运行过程中不一定会用到,此时使用 Lazy 可以延迟初始化,提升程序启动速度
  • 资源加载:加载文件、图片等资源时,如果不是程序一开始就需要的,通过 Lazy 可以在需要展示或使用这些资源时才进行加载
  • 单例模式优化:实现单例模式时,用 Lazy 可以做到线程安全的延迟初始化

三、实战 Demo

基础用法

下面的代码展示了 Lazy 的基本使用,延迟初始化一个简单的字符串对象:

class Program
{static void Main(){// 声明一个 Lazy<string> 对象,推迟字符串的初始化Lazy<string> lazyString = new Lazy<string>(() => "延迟初始化的字符串");// 判断此时字符串是否被创建Console.WriteLine("在访问 Value 之前,字符串是否已初始化: " + lazyString
http://www.lryc.cn/news/617864.html

相关文章:

  • Python 在自动化办公汇总和脚本示例
  • 本地文件夹与 GitHub 远程仓库绑定并进行日常操作的完整命令流程
  • 【基本有序数组中找到有且仅有的一个无序元素并进行排序之顺序法】2022-10-12
  • Linux线程——线程控制及理解
  • Transformer前传:Seq2Seq与注意力机制Attention
  • Haystack:面向大模型应用的模块化检索增强生成(RAG)框架
  • 什么情况下会导致日本服务器变慢?解决办法
  • Linux kernel network stack, some good article
  • Flink + Hologres构建实时数仓
  • Spring JDBC
  • TDengine IDMP 基本功能(1.界面布局和操作)
  • 【华为机试】208. 实现 Trie (前缀树)
  • openGauss逻辑备份恢复工具gs_dump/gs_restore
  • AI生成代码时代的商业模式重构:从“软件即产品”到“价值即服务”
  • 大模型落地实践:从技术重构到行业变革的双重突破
  • 亚马逊广告底层逻辑重构:从流量博弈到价值创造的战略升维
  • 思科交换机的不同级别IOS软件有什么区别?
  • Oracle数据库中的Library cache lock和pin介绍
  • Qt——实现”Hello World“、认识对象树与Qt坐标系
  • 力扣109:有序链表转换二叉搜索树
  • Linux下安装jdk
  • 分享一款基于STC8H8K32U-45I-LQFP48单片机的4路数字量输入输出模块
  • STM32——system文件夹
  • Day12 Maven高级
  • 2025牛客多校第七场 双生、象牙 个人题解
  • 大模型提示词工程实践:大语言模型文本转换实践
  • python之uv使用
  • 深度学习和神经网络最基础的mlp,从最基础的开始讲
  • OpenBMC中的snk-psu-manager:架构、原理与应用深度解析
  • 排错000