与MSDN一样:
“使用Lazy<T>
的实例来推迟创建大型或资源密集型对象或执行资源密集型任务,尤其是在此类创建或执行可能不会在程序的生命周期中发生。“
对于工厂模式,我可以使用Lazy<T>
来创建实例,而不是使用Activator.CreateInstance
。
返回
new Lazy<T>().value
类似的东西:
return Lazy<IFactoryInstance>(() => new Car()).Value;
使我能够以每种类型/实例等的不同方式初始化对象实例。
来自方法
但是在阅读MSDN中的文本时我有疑虑。类似代码的好习惯是什么?为什么不使用Lazy<T>
?
答案 0 :(得分:5)
Lazy<T>
类型和Activator.CreateInstance
函数的用途非常不同。
Lazy<T>
:用于创建一次且仅一次的延迟初始化值。我不同意MSDN对资源密集型的定义,只需将其替换为“用于按需创建昂贵的类型与初始化”。 Activator.CreateInstance
:用于根据运行时信息创建类型实例 Lazy<T>
类型本身不适合工厂模式,因为它对创建单个实例(不是很多)很有用。