C#中延迟初始化实现原理的一点浅见。

·  阅读 218

C#中延迟初始化实现原理的一点浅见。

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

用法及简单介绍 关于解决方法,微软给出了三种解决方案,这里主要聊Lazy。

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

主要逻辑实现

我们先看一下元数据。

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述 可这tmd不还是私有方法吗?玩人呢?不过事到如今,只好故技重施,再来一把。功夫不负有心人,最终找到了终点:Value属性(这也算得上是首尾照应了……) 在这里插入图片描述 结论 到这里我们终于明白了,别看微软说的大词满天飞,其实实现方法不复杂,只是在我们调用Value属性时候,它才去执行获取值。

分类:
后端
标签:
分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改