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>类型和Activator.CreateInstance函数具有非常不同的用途。

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

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