實作 Equals 和相等運算子 (==) 的方針
更新:2007 年 11 月
下列規則概述實作 Equals 方法和相等運算子 (==) 的方針:
每當您實作 Equals 方法時,實作 GetHashCode 方法。這使 Equals 和 GetHashCode 一致。
每當您實作相等運算子 (==) 並讓它們進行相同動作時,即會覆寫 Equals 方法。如此可讓使用 Equals 方法的基礎結構程式碼 (例如 Hashtable 和 ArrayList) 的行為模式,與使用相等運算子編寫的使用者程式碼一樣。
每當您實作 IComparable 時,請覆寫 Equals 方法。
當您實作 IComparable 時,請考慮為相等 (==)、不等於 (!=)、小於 (<) 和大於 (>) 運算子實作運算子多載。
不要從 Equals 或 GetHashCode 方法或相等運算子 (==) 擲回例外狀況。
如需 Equals 方法的相關資訊,請參閱實作 Equals 方法。
在實值型別上實作相等運算子 (==)
在大部分程式語言中沒有實值型別的等號比較運算子 (==) 的預設實作。因此,每當相等有意義時,您應該多載相等運算子 (==)。
您應該考慮在實值型別上實作 Equals 方法,因為在 System.ValueType 上的預設實作與您的自訂實作將不會執行。
每當您覆寫 Equals 方法時,請實作相等運算子 (==)。
在參考型別上實作相等運算子 (==)
大部分語言不會為參考型別提供相等運算子 (==) 的預設實作;因此,在參考型別上實作相等運算子 (==) 時,應該謹慎使用。大部分的參考型別 (甚至是實作 Equals 方法的參考型別) 都不應該覆寫相等運算子 (==)。
如果您的型別是類似 Point、String、BigNumber 等基底型別,請覆寫相等運算子 (==)。每當您考慮多載加法 (+) 與減法 (-) 運算子時,也應該考慮多載相等運算子 (==)。
Portions Copyright 2005 Microsoft Corporation.All rights reserved.
Portions Copyright Addison-Wesley Corporation.All rights reserved.
如需設計方針的詳細資訊,請參閱由 Krzysztof Cwalina 和 Brad Abrams 所著,並由 Addison-Wesley 於 2005 年發行的「Framework 設計方針:可重複使用之 .NET 程式庫的慣例、慣用語法和模式」一書。