定义

延迟初始化:一个对象的延迟初始化意味着它的创建被推迟到它第一次使用。(对于本主题,延迟初始化延迟实例化是同义词。)延迟初始化主要用于提高性能、避免浪费计算和减少程序内存需求。

用法及简单介绍

关于解决方法,微软给出了三种解决方案,这里主要聊Lazy<T>。

用法没什么好聊的,一句代码搞定。

主要属性有两个,第一个是Value, 用于获取初始化的model值。

另一个则是IsValueCreated,用于判断model是否被初始化。

除了以上两个属性外,还有LazyThreadSafetyMode这个枚举。

网上对于它的介绍有很多,我就不多废话了,直奔主题。

主要逻辑实现

我们先看一下元数据。

Lazy一共定义了6个构造方法,我们这里主要看第6个。

传入的委托被m_valueFactory接收了数据。那么它是在什么时候被调用的呢?经过一番功夫查找后,发现它是在一个名为“CreateValue”的方法里被调用的。

可是到这里我还是没能解决心中疑惑,它虽然是在这里被调用的,可这是私有方法啊,接下来只好顺藤摸瓜往上找。一段漫长的时光过去了,终于找到了它的“上家”:LazyInitValue。

可这tmd不还是私有方法吗?玩人呢?不过事到如今,只好故技重施,再来一把。功夫不负有心人,最终找到了终点:Value属性(这也算得上是首尾照应了……)

结论

到这里我们终于明白了,别看微软说的大词满天飞,其实实现方法不复杂,只是在我们调用Value属性时候,它才去执行获取值。

最新文章

  1. 前端网老姚浅谈:怎么学JavaScript?
  2. CSS3选择器——基本选择器
  3. php获取实时汇率数据
  4. bzoj 4066: 简单题
  5. 使用 getNextException() 来检索已经过批处理的特定元素的异常。 ERRORCODE=-4228, SQLSTATE=null
  6. java可访问修饰符
  7. LeetCode之“动态规划”:Triangle
  8. linux中文件的三种time(atime,mtime,ctime)
  9. Echart横坐标时间轴滑动
  10. ASP.NET Core 微服务初探[2]:熔断降级之Polly
  11. 【数学建模】day10-主成分分析
  12. luogu P4148 简单题
  13. 自己对Java的一点看法
  14. 新项目增加gradlew
  15. Ubuntu 14.04安装QQ2012
  16. docker探索-windows10 docker 使用 mysql(二)
  17. 404 Note Found -(课堂实战)- 项目UML设计(团队)
  18. TOJ 3176 Challenge from XOR
  19. jQuery 资料
  20. StrutsResultSupport的使用

热门文章

  1. 个人博客系统Typecho情侣主题模板Cupid
  2. Vue学习笔记之Vue基础语法
  3. JavaWeb中的Servlet
  4. Oracle 11g 单机服务器ASM部署
  5. redis RDB和AOF
  6. windows11 安装跳过互联网验证
  7. 概率生成函数(PGF)简记
  8. js类型以及存储方式
  9. VS 生成事件 xcopy 报错的解决方法
  10. 面试不愁,给你一份SpringBoot常用注解