この例を考えてみましょう。遅延初期化の 2 つの可能な方法を示しています。スレッドセーフであることを除いて、ここで Lazy<T> を使用する特定の利点はありますか?
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; }
}
}
アップデート:
上記のコードは単純な例として考えてください。データ型は関係ありません。ここでのポイントは、Lazy <T> と標準の遅延初期化を比較することです。