Mou*_*Mou 26 c# .net-4.0 c#-4.0
什么是延迟初始化.这是我搜索谷歌后得到的代码.
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")
);
Run Code Online (Sandbox Code Playgroud)
我为什么要以这种方式创建对象....实际上我们需要以这种方式创建对象......寻找答案.
And*_*rew 61
Lazy.NET 4.0 中的功能的目的是替换许多开发人员以前使用属性的模式."老"的方式就像是
private MyClass _myProperty;
public MyClass MyProperty
{
get
{
if (_myProperty == null)
{
_myProperty = new MyClass();
}
return _myProperty;
}
}
Run Code Online (Sandbox Code Playgroud)
这样,_myProperty只有在需要时才会实例化一次.如果它永远不需要,它永远不会被实例化.要做同样的事情Lazy,你可以写
private Lazy<MyClass> _myProperty = new Lazy<MyClass>( () => new MyClass());
public MyClass MyProperty
{
get
{
return _myProperty.Value;
}
}
Run Code Online (Sandbox Code Playgroud)
当然,您不限于以这种方式执行操作Lazy,但目的是指定如何在不需要实际实现值的情况下直到需要它为止.调用代码不必跟踪值是否已被实例化; 相反,调用代码只使用该Value属性.(可以找出该值是否已使用该IsValueCreated属性进行实例化.)
"第一次访问Lazy.Value属性或调用Lazy.ToString方法时会发生延迟初始化.
使用Lazy实例来推迟创建大型或资源密集型对象或执行资源密集型任务,尤其是在程序生命周期内可能不会发生此类创建或执行时.
http://msdn.microsoft.com/en-us/library/dd642331.aspx
| 归档时间: |
|
| 查看次数: |
19918 次 |
| 最近记录: |