6

私が取り組んでいる会社のアプリケーションには、次のようなコードがたくさんあります。

var something = new Lazy<ISomething>(() =>
                    (ISomething)SomethingFactory
                    .GetSomething<ISomething>(args));

ISomething sth = something.Value;

私の理解では、Lazyこれはまったく意味がありませんが、私は会社に入社したばかりで、理由もなく議論したくありません. では、このコードには意味がありますか?

4

4 に答える 4

4

活発に開発されているコードは決して静的ではないため、このようにコーディングする理由の 1 つの可能性は、後でコード内の別の場所に割り当てを移動する必要がある場合です。ただし、これはメソッド内で発生しているように聞こえます。通常、遅延初期化はクラス フィールドまたはプロパティに対して最も頻繁に発生すると予想されます。その場合は、より理にかなっています (クラス内のどのメソッドが最初に使用されるかがわからない場合があるため)。それ)。

残念ながら、Lazy 機能が C# でどのように機能するか (または一般的には lazy init) についての知識が不足している可能性が高く、彼らが見つけた最新の「クールな機能」を使用しようとしているだけかもしれません。

私は会社のコードで奇妙で奇妙なものが増殖しているのを見てきまし. 一番いいのは、なぜそのようにしたのかを尋ねることです。最悪の場合、会社の手順やコーディングの慣行について何かを学ぶことになります。最良の場合、彼らが「ええ、私は知らない」と言った場合、あなたは彼らを教育することになるかもしれません.

于 2013-09-20T12:50:11.690 に答える
1

将来的に がメソッドから移動される場合は便利ですが、この場合、宣言がプロパティに抽出されたように見えるためLazy.Value、オーバーエンジニアリングと見なすことができ、最適な実装ではありません。Lazy

したがって、すぐに-はい、それは役に立ちません。

于 2013-09-20T13:12:53.037 に答える