C# 使用Lazy 懒加载
用Lazy对象能实现懒加载的效果,就是预先定制好对象,但是不去创建它,直到第一次使用的时候才会真正的创建,而且这个还是线程安全的,有了这个玩意,就不用自己去写类似的东西以及单例模式了
static void Start() { Lazy<AAA> aaa = new Lazy<AAA>(); Console.WriteLine("AAA已经懒加载了,但是还没创建"); aaa.Value.Do(); } class AAA { public AAA() { Console.WriteLine("AAA创建"); } public void Do() { Console.WriteLine("AAA Do"); } }
通过Lazy实现单例模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | internal class AAA { /// <summary> /// 通过懒加载实现单例模式,so easy! /// </summary> public static AAA Instance = new Lazy<AAA>(() => new AAA()).Value; /// <summary> /// 将无参构造函数设置成私有的 /// </summary> private AAA() { Console.WriteLine( "create AAA" ); } public void Test() { Console.WriteLine( "test" ); } /// <summary> /// 貌似调用静态成员,Lazy就开始实际创建AAA对象了 /// </summary> public static void TestAAA() { Console.WriteLine( "testAAA" ); } } |
稍微改进一下就不会在调用其他成员的时候就触发的lazy了,否则懒加载就没意义了
internal class AAA { static readonly Lazy<AAA> instance = new Lazy<AAA>(() => new AAA("aaa")); /// <summary> /// 不能直接new Lazy<AAA>(() => new AAA("aaa")).Value,这样会立刻创建对象,懒加载就没有意义了 /// </summary> public static AAA Instance { get { return instance.Value; } } static readonly Lazy<AAA> instance2 = new Lazy<AAA>(() => new AAA("bbb")); public static AAA Instance2 { get { return instance2.Value; } } /// <summary> /// 将无参构造函数设置成私有的 /// </summary> private AAA(string id) { Console.WriteLine("create AAA:" + id); } public void Test() { Console.WriteLine("test"); } /// <summary> /// 这次调用其他成员,就不会创建懒加载的对象了 /// </summary> public static void TestAAA() { Console.WriteLine("testAAA"); } }
标签:
C#学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)