延迟初始化

时间:2014-05-05 07:23:35

标签: c# .net lazy-initialization

我想知道Lazy<T>类的两个构造函数重载之间有什么区别。

  

Lazy(Func,Boolean) - 初始化Lazy的新实例   类。当延迟初始化发生时,指定初始化   使用函数和初始化模式。

     

Lazy(Func,LazyThreadSafetyMode) - 初始化一个新的实例   使用指定初始化函数的Lazy类   线程安全模式。

从线程安全的角度来看,第二个构造函数是否更灵活?哪个LazyThreadSafetyMode成员是Lazy<...>(..., true)的类似物?

2 个答案:

答案 0 :(得分:4)

来自Reflector:

public Lazy(Func<T> valueFactory, bool isThreadSafe) : this(valueFactory, isThreadSafe ?LazyThreadSafetyMode.ExecutionAndPublication : LazyThreadSafetyMode.None)
{
}

因此,如果您通过true,则会转换为LazyThreadSafetyMode.ExecutionAndPublication

false将转换为LazyThreadSafetyMode.None

顺便说一下,如果你只传递了价值因素(完全省略了bool),它就会使用LazyThreadSafetyMode.ExecutionAndPublication

答案 1 :(得分:0)

如果您传递true,则使用ExecutionAndPublication延迟模式初始化对象。如果您通过false,则会使用None模式初始化对象。

如果使用不采用布尔值的重载,则使用ExecutionAndPublication模式初始化。