Equals および等値演算子 (==) 実装のガイドライン

次の規則は、Equals メソッドおよび等値演算子 (==) を実装するときのガイドラインを示しています。

  • Equals メソッドを実装するときは、必ず GetHashCode メソッドを実装します。これによって、EqualsGetHashCode の同期が維持されます。

  • 等値演算子 (==) を実装する場合は、常に Equals メソッドをオーバーライドし、同じ処理を実行させます。これによって、HashtableArrayList など、Equals メソッドを使用するインフラストラクチャ コードが、等値演算子を使用して記述されたユーザー コードと同じように動作するようになります。

  • IComparable インターフェイスを実装する場合は、必ず Equals メソッドをオーバーライドします。

  • IComparable を実装する場合は、等値 (==)、非等値 (!=)、小なり (<)、大なり (>) の各演算子のオーバーロードを実装することを検討してください。

  • Equals メソッド、GetHashCode メソッド、または等値演算子 (==) からは例外をスローしないでください。

Equals メソッドの関連情報については、「Equals メソッドの実装」を参照してください。

値型に対する等値演算子 (==) の実装

ほとんどのプログラミング言語では、値型に対する等値演算子 (==) の既定の実装がありません。そのため、等値であることが重要となる場合は、等値演算子 (==) をオーバーロードする必要があります。

System.ValueType に対しては、等値演算子の既定の実装もカスタム実装も機能しないため、値型では Equals メソッドを実装することを検討してください。

Equals メソッドをオーバーライドする場合は、必ず等値演算子 (==) も実装します。

参照型に対する等値演算子 (==) の実装

ほとんどの言語では、参照型に対する等値演算子 (==) の既定の実装が用意されています。そのため、参照型で等値演算子 (==) を実装する場合は、注意が必要です。ほとんどの参照型は、Equals メソッドを実装するものであっても、等値演算子 (==) をオーバーライドできません。

型が PointStringBigNumber などの基本型である場合には、等値演算子 (==) をオーバーライドしてください。加算 (+) 演算子および減算 (-) 演算子のオーバーライドを検討するときは、等値演算子 (==) のオーバーロードも検討する必要があります。

Portions Copyright 2005 Microsoft Corporation.All rights reserved.

Portions Copyright Addison-Wesley Corporation.All rights reserved.

デザイン ガイドラインの詳細については、2005 年に Addison-Wesley から出版されている Krzysztof Cwalina、Brad Abrams 共著の『Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries』を参照してください。

参照

関連項目

Equals メソッドの実装
Object.Equals Method

概念

使用方法のガイドライン

その他の技術情報

クラス ライブラリ開発のデザイン ガイドライン