Ленивая инициализация в .NET 4
Что такое ленивая инициализация. вот код, который я получил после поиска google.
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")
);
почему я должен создавать объект таким образом... когда на самом деле нам нужно создать объект таким образом...... ищет ответ.
Ответы
Ответ 1
Целью функции 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
.)
Ответ 2
"Ленивая инициализация происходит при первом доступе к ресурсу Lazy.Value или вызове метода Lazy.ToString.
Использовать экземпляр Lazy для отсрочки создания большого или ресурсоемкого объекта или выполнения ресурсоемкой задачи, особенно если такое создание или выполнение могут не произойти в течение всего жизненного цикла программы.
http://msdn.microsoft.com/en-us/library/dd642331.aspx
Ответ 3
Посмотрите здесь документацию msdn: Lazy Initialization
Ленивая инициализация объекта означает, что его создание отложено до его первого использования. Ленивая инициализация в основном используется для повышения производительности, предотвращения расточительных вычислений и сокращения требований к программной памяти.