Цель функции 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
.)