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

发布于:2025-08-12 ⋅ 阅读:(16) ⋅ 点赞:(0)


一文读懂 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

网站公告

今日签到

点亮在社区的每一天
去签到