Подтвердить что ты не робот

Ленивая инициализация в .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")
    );

почему я должен создавать объект таким образом... когда на самом деле нам нужно создать объект таким образом...... ищет ответ.

4b9b3361

Ответ 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

Ленивая инициализация объекта означает, что его создание отложено до его первого использования. Ленивая инициализация в основном используется для повышения производительности, предотвращения расточительных вычислений и сокращения требований к программной памяти.