あいさつ今日、怠惰な初期化コードを実行していて、null合体演算子を使用してこれを実行しないのはなぜかと思いました。短いですが、この方法で実行するためのオーバーヘッドや追加コストがあると思いました。
以下は、遅延初期化に使用されるより一般的な形式と、null合体演算子を使用する形式を示す簡略化されたサンプルコードです。それらはまったく同じ結果をもたらし、同等に見えます。私の最初の考えは、オブジェクトが作成された後、を使用してそれ自体に追加の割り当てがあるということ??
です。これは問題ではなく、コンパイラ/ JITはこれを何らかの方法で最適化しますか、何かもっと悪質なことが起こっているので、で怠惰な初期化を行うべきではありません??
。または、完全に安全で、悪いモジョが発生することはありません。
private MyLazyObject _lazyObject;
public MyLazyObject GetMyLazyObjectUsingMoreCommonMethod()
{
if (_lazyObject != null)
return _lazyObject;
_lazyObject = new MyLazyObject();
return _lazyObject;
}
public MyLazyObject GetMyLazyObjectUsingNullCoalescingOpMethod()
{
_lazyObject = _lazyObject ?? new MyLazyObject();
return _lazyObject;
}