使用Lazy <t> </t>

时间:2011-05-12 15:34:15

标签: c#

MSDN一样:

“使用Lazy<T>的实例来推迟创建大型或资源密集型对象或执行资源密集型任务,尤其是在此类创建或执行可能不会在程序的生命周期中发生。“

对于工厂模式,我可以使用Lazy<T>来创建实例,而不是使用Activator.CreateInstance

返回

new Lazy<T>().value

类似的东西:

return Lazy<IFactoryInstance>(() => new Car()).Value;

使我能够以每种类型/实例等的不同方式初始化对象实例。

来自方法

但是在阅读MSDN中的文本时我有疑虑。类似代码的好习惯是什么?为什么不使用Lazy<T>

1 个答案:

答案 0 :(得分:5)

Lazy<T>类型和Activator.CreateInstance函数的用途非常不同。

  • Lazy<T>:用于创建一次且仅一次的延迟初始化值。我不同意MSDN对资源密集型的定义,只需将其替换为“用于按需创建昂贵的类型与初始化”。
  • Activator.CreateInstance:用于根据运行时信息创建类型实例

Lazy<T>类型本身不适合工厂模式,因为它对创建单个实例(不是很多)很有用。