C#重寫Equals方法步驟


  1. 檢查傳入的參數是否為null, 如果為null,那么返回false, 否則執行步驟2
  2. 調用ReferenceEquals查看是否為統一個對象,如果是,那么返回true, 否則執行步驟3
  3. 判斷兩者是否為同一類型,如果不是,那么返回false,否則執行步驟4
  4. 調用自己寫的一個Equals方法重載,其參數為具體子類型而非object,然后返回其執行結果
  5. 在重載的Equals方法中,調用GetHashCode函數並判斷兩者的返回值是否相同,如果不同則返回false,否則執行步驟6
  6. 在重載的Equals方法中,判斷類型的父類是否為Object,如果不是則調用Base.Equals,如果Base.Equals返回false, 那么返回false,否則執行步驟7
  7. 比較類型自己的Field是是否相等,如果相等則返回true,否則返回false。
  8. 除此之外,還需要重載GetHashCode函數以及==,!=運算符

 以上是完整的重載步驟,使用時根據具體情況可以跳過一些,比如對struct類型重載Equals時,步驟2應該省略。在實踐中,經常出問題的情況是把hashcode相等和Equals相等等價了即:hashcode相等 <=> equals 相等,正確的情況是hashcode不相等=>equals不相等,equals相等=>hashcode相等,反之則不正確。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM