[英]C#: How does the static object.Equals check for equality?
假設你有兩個不同的類,每個類都有自己的Equals實現; 使用哪一個? 如果只有一個人有一個怎么辦? 或者他們都沒有? 以下任何一行是否相同?
object .Equals( first, second )
first .Equals( second )
second .Equals( first )
我猜測前兩個可能是等價的,但我真的不知道。
它到底是做什么的?
基本上它做了三件事:
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.