備註
此內容經Pearson Education, Inc.授權從架構設計指導方針:可重複使用 .NET 程式庫的慣例、習慣用語與範式 (第2版)轉載。 該版於2008年出版,該書自那以後已於 第三版全面修訂。 此頁面的某些資訊可能已過期。
本節討論多載相等運算符,並參考 operator== 和 operator!= 做為相等運算符。
❌ 請勿僅多載一個相等運算子,而忽略另一個。
✔️ 請確定 Object.Equals 和相等運算符具有完全相同的語意和類似的效能特性。
這通常表示當等號運算符多載時,必須覆寫 Object.Equals。
❌ 避免從相等運算子拋出例外。
例如,如果其中一個自變數為 null,而不是擲回 NullReferenceException,則傳回 false。
實值類型的相等運算符
✔️ 如果相等有意義,DO 會在實值型別上多載相等運算符。
在大多數的程式設計語言中,數值類型沒有預設的 operator== 實作。
參考型別上的相等運算符
❌ 避免在可變參考型別上多載相等運算符。
許多語言都有用於參考型別的內建相等運算符。 內建運算子通常會實作參考相等,而且當預設行為變更為值相等時,許多開發人員都會感到驚訝。
此問題會因不可變的參考型別而減輕,因為不變性使得更難注意到參考相等與值相等之間的差異。
❌ 如果實作速度明顯比參考相等比較慢,請避免在參考型別上多載相等運算符。
© 2005年、2009年Microsoft公司部分。 保留所有權利。
經 Pearson Education, Inc. 許可重新刊登自 Krzysztof Cwalina 和 Brad Abrams 所著的 架構設計指導方針: 可重複使用的 .NET 程式庫慣例、慣用語和模式,第 2 版,2008 年 10 月 22 日由 Addison-Wesley Professional 發行,作為 Microsoft Windows 開發系列的一部分。