什么是懒惰初始化。这是我在谷歌搜索后得到的代码。
class MessageClass
{
public string Message { get; set; }
public MessageClass(string message)
{
this.Message = message;
Console.WriteLine(" *** MessageClass constructed [{0}]", message);
}
}
Lazy<MessageClass> someInstance = new Lazy<MessageClass>(
() => new MessageClass("The message")
);
为什么我要在这个way....when中创建对象实际上我们需要在这个way......looking中创建对象来回答。
发布于 2011-06-21 20:32:35
.NET 4.0中的Lazy
特性的目的是用属性替换许多开发人员以前使用的模式。“老”的方式是这样的:
private MyClass _myProperty;
public MyClass MyProperty
{
get
{
if (_myProperty == null)
{
_myProperty = new MyClass();
}
return _myProperty;
}
}
这样,_myProperty
只会实例化一次,而且只在需要时实例化。如果从来不需要它,就永远不会实例化它。要对Lazy
执行相同的操作,您可以这样写
private Lazy<MyClass> _myProperty = new Lazy<MyClass>( () => new MyClass());
public MyClass MyProperty
{
get
{
return _myProperty.Value;
}
}
当然,您并不局限于使用Lazy
以这种方式进行操作,而是指定如何实例化一个值,直到需要它时才进行实例化。调用代码不必跟踪该值是否已实例化;相反,调用代码只使用Value
属性。(可以确定该值是否已使用IsValueCreated
属性实例化。)
发布于 2011-06-21 20:24:24
“第一次访问Lazy.Value属性或调用Lazy.ToString方法时,会发生延迟初始化。
使用Lazy的实例可以延迟创建大型或资源密集型对象或执行资源密集型任务,特别是当此类创建或执行可能不会在程序的生命周期内发生时。“
发布于 2011-06-21 20:23:54
点击这里查看msdn文档:Lazy Initialization
对象的延迟初始化意味着它的创建被推迟到第一次使用它。延迟初始化主要用于提高性能,避免浪费计算,并减少程序内存需求。
https://stackoverflow.com/questions/6425133
复制相似问题