首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Effective C#:區別四個判等函數 (1) - ReferenceEquals 與靜態 Equals 基礎

     編輯:關於C語言

.NET 四大判等函數概覽

  1. Object.ReferenceEquals - 靜態,參考相等
  2. Object.Equals - 靜態,邏輯相等
  3. 型別的 Equals - 實例虛擬方法
  4. 型別的 == 運算符 - 靜態運算符

四者相互關聯,修改其中一個會影響其他結果。

Object.ReferenceEquals:僅限引用型別

public static bool ReferenceEquals(object left, object right);

判斷兩個引用是否指向同一記憶體位址。值型別呼叫永遠回傳 false,因為每次裝箱產生不同物件:

int n = 10;
Object.ReferenceEquals(n, n); // false - 兩次裝箱位址不同

此方法無需覆寫,已完美完成任務。

Object.Equals (靜態):安全的通用判等

public static bool Equals(object left, object right)
{
    if (left == right) return true;
    if (left == null || right == null) return false;
    return left.Equals(right);
}

三步驟判斷:

  1. 參考相等(含同為 null)
  2. 單一 null 檢查
  3. 委派給實例 Equals

關鍵差異

雖參數型別同為 object,但 Object.Equals 能正確處理值型別:

int n = 10;
Object.Equals(n, n);     // true - 正確比較數值
Object.Equals(n, 10);    // true

因為步驟 1-2 使用型別的 == 運算符(值型別預設比較數值),步驟 3 呼叫實例 Equals(值型別預設比較數值)。

型別實作判等的影響

型別是否提供正確的 == 與 Equals 實作,決定靜態 Object.Equals 結果的正確性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved