Equals および等値演算子 (==) 実装のガイドライン
次の規則は、Equals メソッドおよび等値演算子 (==) を実装するときのガイドラインを示しています。
Equals メソッドを実装するときは、必ず GetHashCode メソッドを実装します。これによって、Equals と GetHashCode の同期が維持されます。
等値演算子 (==) を実装する場合は、常に Equals メソッドをオーバーライドし、同じ処理を実行させます。これによって、Hashtable や ArrayList など、Equals メソッドを使用するインフラストラクチャ コードが、等値演算子を使用して記述されたユーザー コードと同じように動作するようになります。
IComparable インターフェイスを実装する場合は、必ず Equals メソッドをオーバーライドします。
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.
デザイン ガイドラインの詳細については、2005 年に Addison-Wesley から出版されている Krzysztof Cwalina、Brad Abrams 共著の『Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries』を参照してください。
参照
関連項目
Equals メソッドの実装
Object.Equals Method