与在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>?
该Lazy<T>类型和Activator.CreateInstance功能具有非常不同的目的.
Lazy<T>:用于一次创建延迟初始化值一次.我不同意MSDN对资源密集型的定义,只需将其替换为"用于按需创建昂贵的类型与初始化". Activator.CreateInstance:用于根据运行时信息创建类型实例 在Lazy<T>本身类型不适合工厂模式,因为它是建立一个单一实例(并不多)是有用的.
| 归档时间: |
|
| 查看次数: |
981 次 |
| 最近记录: |