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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Portions Copyright 2005 Microsoft Corporation. All rights reserved.

Portions Copyright Addison-Wesley Corporation. All rights reserved.

設計ガイドラインの詳細についてを参照してください、「フレームワークの設計ガイドライン。規則、慣用句、および再利用可能なパターン。ネット ライブラリ」本クシシュトフ Cwalina、ブラッド エイブラムス、アスキー、2005 年発表しました。

参照

参照

Equals メソッドの実装

Object.Equals

概念

使用方法のガイドライン

その他の技術情報

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