什么是延迟初始化。这是我在谷歌搜索后得到的代码。
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")
);
为什么我要以这种方式创建一个对象?
实际上什么时候我们需要以这种方式创建对象?
目的Lazy
.NET 4.0 中的一个功能是用属性替换许多开发人员以前使用的模式。 “旧”的方式就像
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
财产。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)