簡體   English   中英

C#:靜態object.Equals如何檢查是否相等?

[英]C#: How does the static object.Equals check for equality?

假設你有兩個不同的類,每個類都有自己的Equals實現; 使用哪一個? 如果只有一個人有一個怎么辦? 或者他們都沒有? 以下任何一行是否相同?

object .Equals( first, second )
first .Equals( second )
second .Equals( first )

我猜測前兩個可能是等價的,但我真的不知道。

它到底是做什么的?

基本上它做了三件事:

  • 檢查引用相等性(如果是,則返回true)
  • 檢查引用是否為null(如果任一值為null,則返回false;現在已經處理了null == null的情況)
  • 檢查值是否與first.Equals(second)相等

排序不應該的問題,如果這兩個值都乖巧平等的實現,作為平等應該被實現,使得x.Equals(y)意味着y.Equals(x) 但是,我安裝的脫機文檔確實指出first.Equals(second)(或objA.equals(objB)使用真實參數命名)。 有趣的是, 在線文檔沒有提到這一點。

為了使所有這些具體,實現可能如下所示:

public static bool Equals(object x, object y)
{
    if (x == y) // Reference equality only; overloaded operators are ignored
    {
        return true;
    }
    if (x == null || y == null) // Again, reference checks
    {
        return false;
    }
    return x.Equals(y); // Safe as we know x != null.
}

默認情況下,對象等效性由對象在內存中的地址決定。 如果兩個實例具有相同的內存地址,則它們是相等的。

然而,這可以在對象內被重載以使得開發者可以比較arn't在相同的存儲器位置,並且仍然被認為是相等的兩個對象。 例如,如果您有一個數據訪問層,其中每個對象都有來自數據庫的數據記錄ID,則可以根據ID比較對象相等性。

您可以重載運算符以生成此功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM