Lazy 与 Activator.CreateInstance 的用法
本文关键字:CreateInstance 用法 Activator Lazy | 更新日期: 2023-09-27 17:56:20
如MSDN上的:
"使用
Lazy<T>
实例来推迟创建大型或资源密集型对象或资源密集型任务的执行,尤其是在此类创建或执行时在程序的生命周期内可能不会发生。
对于工厂模式,我可以使用Lazy<T>
来创建实例,而不是使用 Activator.CreateInstance
.
通过返回
new Lazy<T>().value
像这样:
return Lazy<IFactoryInstance>(() => new Car()).Value;
这使我能够从方法中以不同的方式初始化每个类型/实例等的对象实例。
但是在阅读MSDN的文本时,我有疑问。对于类似的代码段,什么是好的做法?为什么不使用Lazy<T>
?
Lazy<T>
类型和Activator.CreateInstance
函数具有非常不同的用途。
-
Lazy<T>
:用于创建一次且仅一次的延迟初始化值。我不同意 MSDN 对资源密集型的定义,只需将其替换为"用于按需创建昂贵的类型而不是初始化"。 -
Activator.CreateInstance
:用于基于运行时信息创建类型实例
Lazy<T>
类型本身不适合工厂模式,因为它对于创建单个实例(不是很多)很有用。