.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中的Lazyfunction的目的是替换许多开发人员以前使用属性的模式。 “老”的方式就像是

 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实例来推迟创建大型或资源密集型对象或执行资源密集型任务,尤其是在程序生命周期内可能不会发生此类创建或执行时。

http://msdn.microsoft.com/en-us/library/dd642331.aspx

在这里查看msdn文档: 延迟初始化

对象的延迟初始化意味着它的创建将延迟到首次使用。 延迟初始化主要用于提高性能,避免浪费计算,并降低程序内存要求。