使用Lazy <T>

Cas*_*jne 4 c#

与在MSDN上一样:

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

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

通过返回一个

new Lazy<T>().value
Run Code Online (Sandbox Code Playgroud)

就像是:

return Lazy<IFactoryInstance>(() => new Car()).Value;
Run Code Online (Sandbox Code Playgroud)

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

从一种方法

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

Jar*_*Par 5

Lazy<T>类型和Activator.CreateInstance功能具有非常不同的目的.

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

Lazy<T>本身类型不适合工厂模式,因为它是建立一个单一实例(并不多)是有用的.