13

この例を考えてみましょう。遅延初期化の 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> と標準の遅延初期化を比較することです。

4

1 に答える 1

5

意味的にはより正確です。

を使用する場合Nullable<decimal>、の値はnull「未評価」状態を表すということです。これは一般的な変換ですが、それでも任意です。解釈する方法は他にも数百万ありますnull。そのため、この場合のnullの意味を(ドキュメント内または少なくともコメントとして)どこかで説明する必要があります。

逆に、を使用するLazy<decimal>と、意図が明確になります。

于 2011-07-25T08:02:13.333 に答える