等號比較運算子

注意

此內容是由 Pearson Education, Inc. 授權轉載自架構設計指導方針:可重複使用 .NET 程式庫的慣例、慣用語和模式,第 2 版。 該版於 2008 年出版,該書自那以後已於第三版進行了全面修訂。 此頁面上的某些資訊可能已過期。

本節討論多載等號比較運算子,並將 operator==operator!= 稱為等號比較運算子。

❌ 切勿多載其中一個等號比較運算子,也不要多載另一個運算子。

✔️ 請確定 Object.Equals 和等號比較運算子具有完全相同的語意和類似的效能特色。

這通常表示在多載等號比較運算子時必須覆寫 Object.Equals

❌ 避免從等號比較運算子擲回例外狀況。

例如,如果其中一個引數為 null,而不是擲回 NullReferenceException,則傳回 false。

實值型別的等號比較運算子

✔️ 如果等號有意義,請多載實值型別的等號比較運算子。

在大部分的程式設計語言中,實值型別並沒有預設實作 operator==

參考型別的等號比較運算子

❌ 避免在可變動的參考型別上多載等號比較運算子。

許多語言都有參考型別的內建等號比較運算子。 內建運算子通常會實作參考相等,而且當預設行為變更為實值相等時,許多開發人員都會感到意外。

此問題會因不可變的參考型別而減輕,因為不變性使得更難注意到參考相等與值相等之間的差異。

❌ 如果實作明顯比參考相等較慢,請避免在參考型別上多載等號比較運算子。

Portions © 2005, 2009 Microsoft Corporation. 著作權所有,並保留一切權利。

獲 Pearson Education, Inc. 的授權再版,從 Krzysztof Cwalina 和 Brad Abrams 撰寫,並在 2008 年 10 月 22 日由 Addison-Wesley Professional 出版,作為 Microsoft Windows Development Series 一部份的 Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition 節錄。

另請參閱