Zasadniczo robi trzy rzeczy:
- Sprawdzenie równości odniesienia (return true jeśli tak)
- Sprawdź nieważności odniesienia (return false jeśli jedna wartość jest null; teraz null == null case został obsługiwane)
- Sprawdzenie równości wartości z
first.Equals(second)
zamawiania nie powinno znaczenia, czy zarówno wartości mają dobrze zachowane implementacje równości, ponieważ równość powinna być zaimplementowana tak, aby x.Equals(y)
implikowała y.Equals(x)
. Jednak zainstalowana przeze mnie dokumentacja trybu offline stwierdza, że jest to pierwsze. Wymóg (drugi) (lub objA.equals (objB) do używania prawdziwego nazewnictwa parametrów). online documentation nie wspomina o tym, co ciekawe.
Wystarczy, aby wszystkie tego betonu, realizacja mogłaby wyglądać następująco:
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.
}
Należy zaznaczyć, że główna różnica między statycznym 'Object.Equals' a wirtualnym' first .Equals (second) 'jest taka, że ostatnia ** ulegnie awarii **, jeśli' first' jest pustym odwołaniem. –