C#如何使用Lazy类型 C#延迟初始化使用方法

星降
发布: 2025-12-13 10:46:03
原创
635人浏览过
Lazy用于延迟初始化,确保对象仅在首次访问Value时创建,适用于高成本、可能不用或需线程安全初始化的场景;支持三种线程安全模式,默认ExecutionAndPublication。

c#如何使用lazy<t>类型 <a   style=c#延迟初始化使用方法">

Lazy 是 C# 中用于实现延迟初始化(Lazy Initialization)的核心类型,它确保某个对象或值只在第一次被访问时才创建,之后重复访问直接返回已创建的实例。这能节省资源、避免不必要的计算或 I/O,尤其适合开销大、可能不被使用的对象。

什么时候该用 Lazy

适用于以下场景:

  • 对象构造成本高(如数据库连接、大型配置加载、文件读取)
  • 对象可能在整个生命周期中都不会被用到
  • 需要线程安全的单次初始化(默认支持)
  • 想把“创建时机”从声明/构造阶段推迟到真正使用时

基本用法:最简初始化

直接传入一个工厂函数(Func),首次访问 Value 属性时触发创建:

(C# 6+ 推荐写法)

private readonly Lazy<List<string>> _heavyList = new(() => LoadFromDatabase());
登录后复制

调用时只需:
var data = _heavyList.Value; // 第一次调用才执行 LoadFromDatabase()

控制线程安全与初始化时机

Lazy 构造时可选 LazyThreadSafetyMode 枚举:

  • LazyThreadSafetyMode.ExecutionAndPublication(默认):多线程下保证只初始化一次,且线程安全
  • LazyThreadSafetyMode.PublicationOnly:允许多次初始化,但只发布第一个成功结果(轻量级,适合无副作用的工厂)
  • LazyThreadSafetyMode.None:完全不加锁,仅限单线程场景(性能最高)

例如禁用线程安全(确认是单线程):

独响
独响

一个轻笔记+角色扮演的app

独响 249
查看详情 独响

var lazy = new Lazy<int>(() => ExpensiveCalc(), LazyThreadSafetyMode.None);</int>

配合属性封装更自然

常与只读属性结合,隐藏 Lazy 实现细节:

private readonly Lazy<HttpClient> _httpClient = new(() => new HttpClient());<br>public HttpClient Client => _httpClient.Value;
登录后复制

外部调用 obj.Client 就像普通属性,实际按需创建,干净又高效。

基本上就这些。用好 Lazy 能让初始化逻辑更可控、更轻量,不复杂但容易忽略。

以上就是C#如何使用Lazy类型 C#延迟初始化使用方法的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号