無限再帰を避けるために等価演算子 (==) を安全にオーバーロードします
等価演算子 (==) をオーバーロードする場合は、無限再帰を防ぐために null の場合を慎重に処理してください。一方または両方のオペランドが空の場合、== チェックの無限ループが発生する可能性があります。
この問題を解決するには、 == の代わりに ReferenceEquals
メソッド を使用してオブジェクトの null 値を比較してください。このメソッドは、両方のオペランドが null であるか、両方のオペランドが同じオブジェクトを参照している場合は true を返し、それ以外の場合は false を返します。 ReferenceEquals
を使用することで、次のコードは null 値を正確に処理します:
<code class="language-csharp">Foo foo1 = null; Foo foo2 = new Foo(); Assert.IsFalse(foo1 == foo2); public static bool operator ==(Foo foo1, Foo foo2) { if (object.ReferenceEquals(null, foo1)) return object.ReferenceEquals(null, foo2); return foo1.Equals(foo2); }</code>
このアプローチを採用することで、 == オーバーロードされたメソッドは、無限再帰を引き起こすことなく Foo オブジェクトを (null であるかどうかに関係なく) 効率的に比較できます。
以上が等価演算子 (==) をオーバーロードするときに無限再帰を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。