Какие преимущества предлагает ленивый по сравнению с стандартным ленивым экземпляром?

StackOverflow https://stackoverflow.com/questions/6813055

  •  25-10-2019
  •  | 
  •  

Вопрос

Рассмотрим этот пример, он показывает два возможных способа ленивой инициализации. За исключением того, чтобы быть защищенным потоком, существуют ли какие-либо конкретные преимущества использования ленивыхu003CT> здесь?

class Customer {
    private decimal? _balance2;
    private static decimal GetBalanceOverNetwork() {
        //lengthy network operations
        Thread.Sleep(2000);
        return 99.9M;
    }

    public decimal? GetBalance2Lazily() {
        return _balance2 ?? (_balance2 = GetBalanceOverNetwork());
    }

    private readonly Lazy<decimal> _balance1 = new Lazy<decimal>(GetBalanceOverNetwork);

    public Lazy<decimal> Balance1 {
        get { return _balance1; }
    }
}

ОБНОВИТЬ:

Пожалуйста, рассмотрите выше кода как простой пример, типы данных не имеют значения, то есть здесь состоит в том, чтобы сравнить ленивыйu003CT> над стандартной ленивой инициализацией.

Это было полезно?

Решение

Это семантически правильно.

Когда вы используете Nullable<decimal>, вы говорите, что ценность null будет стоять для «неоценка» состояния. Хотя это общее преобразование, оно все еще произвольное. Есть миллион других способов интерпретировать null, Так вы, вероятно, должны где -то объяснить (в документации или, по крайней мере, как комментарий), что нулевое означает в этом случае.

Напротив, когда вы используете Lazy<decimal>, ваши намерения ясны.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top