.NET 4中的延迟初始化
什么是延迟初始化。 这是我搜索谷歌后得到的代码。
class MessageClass { public string Message { get; set; } public MessageClass(string message) { this.Message = message; Console.WriteLine(" *** MessageClass constructed [{0}]", message); } } Lazy someInstance = new Lazy( () => new MessageClass("The message") );
为什么我应该以这种方式创建对象….实际上我们需要以这种方式创建对象……寻找答案。
.NET 4.0中的Lazy
function的目的是替换许多开发人员以前使用属性的模式。 “老”的方式就像是
private MyClass _myProperty; public MyClass MyProperty { get { if (_myProperty == null) { _myProperty = new MyClass(); } return _myProperty; } }
这样, _myProperty
只会在需要时进行一次实例化。 如果它永远不需要,它永远不会被实例化。 要用Lazy
做同样的事情,你可能会写
private Lazy _myProperty = new Lazy ( () => new MyClass()); public MyClass MyProperty { get { return _myProperty.Value; } }
当然,您并不局限于使用Lazy
以这种方式执行操作,但目的是指定如何在不需要实际实现值的情况下直到需要它为止。 调用代码不必跟踪值是否已被实例化; 相反,调用代码只使用Value
属性。 (可以找出该值是否已使用IsValueCreated
属性进行实例化。)
“第一次访问Lazy.Value属性或调用Lazy.ToString方法时会发生延迟初始化。
使用Lazy实例来推迟创建大型或资源密集型对象或执行资源密集型任务,尤其是在程序生命周期内可能不会发生此类创建或执行时。
在这里查看msdn文档: 延迟初始化
对象的延迟初始化意味着它的创建将延迟到首次使用。 延迟初始化主要用于提高性能,避免浪费计算,并降低程序内存要求。