共用方式為


實作 Equals 和相等運算子 (==) 的方針

更新:2007 年 11 月

下列規則概述實作 Equals 方法和相等運算子 (==) 的方針:

  • 每當您實作 Equals 方法時,實作 GetHashCode 方法。這使 EqualsGetHashCode 一致。

  • 每當您實作相等運算子 (==) 並讓它們進行相同動作時,即會覆寫 Equals 方法。如此可讓使用 Equals 方法的基礎結構程式碼 (例如 HashtableArrayList) 的行為模式,與使用相等運算子編寫的使用者程式碼一樣。

  • 每當您實作 IComparable 時,請覆寫 Equals 方法。

  • 當您實作 IComparable 時,請考慮為相等 (==)、不等於 (!=)、小於 (<) 和大於 (>) 運算子實作運算子多載。

  • 不要從 EqualsGetHashCode 方法或相等運算子 (==) 擲回例外狀況。

如需 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 程式庫的慣例、慣用語法和模式」一書。

請參閱

概念

用法方針

參考

實作 Equals 方法

Object.Equals

其他資源

開發類別庫的設計方針