次の方法で共有


等値演算子

このコンテンツは、 フレームワーク設計ガイドライン (再利用可能な .NET ライブラリの規則、イディオム、パターン、第 2 版) から、Pearson Education, Inc. のアクセス許可によって再印刷されます。 そのエディションは2008年に出版され、その後 、本は第3版で完全に改訂されています。 このページの情報の一部が古くなっている可能性があります。

このセクションでは、等値演算子のオーバーロードについて説明し、 operator==operator!= を等値演算子として参照します。

❌ 等値演算子の 1 つをオーバーロードしないでください。もう一方はオーバーロードしないでください。

✔️ Object.Equals 演算子と等値演算子のセマンティクスとパフォーマンス特性がまったく同じであることを確認してください。

これは、多くの場合、等値演算子がオーバーロードされたときに Object.Equals をオーバーライドする必要があることを意味します。

❌ 等値演算子からは例外をスローしないでください。

たとえば、引数の 1 つが null の場合、 NullReferenceExceptionをスローする代わりに false を返します。

値型の等値演算子

✔️ 等値が意味を持つ場合は、値型の等値演算子をオーバーロードします。

ほとんどのプログラミング言語では、値型の operator== の既定の実装はありません。

参照型での等値演算子

❌ 変更可能な参照型に対する等値演算子のオーバーロードを回避します。

多くの言語には、参照型の等価演算子が組み込まれています。 通常、組み込みの演算子は参照の等価性を実装します。多くの開発者は、既定の動作が値の等値に変更されたときに驚きます。

不変性により、参照の等価性と値の等価性の違いに気付きにくくなるため、この問題は不変の参照型に対して軽減されます。

❌ 参照の等値演算子よりも実装が大幅に遅くなる場合は、参照型で等値演算子をオーバーロードしないようにします。

Portions © 2005, 2009 Microsoft Corporation. 無断転載を禁じます。

フレームワーク設計ガイドライン:再利用可能な .NET ライブラリの規則、イディオム、パターン、Krzysztof Cwalina および Brad Abrams による第 2 版は、2008 年 10 月 22 日に Microsoft Windows 開発シリーズの一部として Addison-Wesley Professional によって公開されました。

こちらも参照ください