C# Equals


說起.NET中的類,本是同根生,一點不為過。因為CLR要求所有類都要繼承自System.Object。所有對象都必須提供一組通用操作,包括對象的等值性唯一性散列碼以及克隆


一、等值性——Equals()方法

有時候我們需要比較兩個對象是否相等,比如在一個ArrayList中進行排序查找等操作時。

System.Object提供了Equals()虛方法:

class Object

{

public virtual Boolean Equals(object o)

{

if (this == o) return true;

else return false;

}

}

這種判斷方式非常簡單:直接比較是兩個引用是否指向的是同一對象。但這樣比較是不確切的。所以我們需要重寫該方法,提供更合適的實現方式。

重寫時Equals()四大原則

  • 自反。即x.Equals(x)必須為true。
  • 對稱。即x.Equals(y)和y.Equals(x)必須返回同樣的值。
  • 可傳遞。即如果x.Equals(y)和y.Equals(z)都返回true,則x.Equals(z)也返回true。
  • 前后一致。如果兩個對象的值沒變,那么多次比較的值都應該是相同的。

重寫思路

  • 1. 如果參數obj為null,返回false。因為在非靜態方法中,使用this表示的當前對象肯定不是Null。
  • 2. 如果this和obj參數指向同一實例對象,返回true。    這樣省略字段比對過程,提高性能。
  • 3. 如果this 和obj參數指向的對象類型不同,則返回false。
  • 4. 比較this和obj中每個實例字段,如果字段不相等則返回false。
  • 5. 調用基類的Equals方法,如果調用結果為false,則返回false;
  • 6. 至此,才能返回true。


免責聲明!

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



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