Fondamentalement, il fait trois choses:
- Vérifier l'égalité de référence (return true si oui)
- Vérifier la nullité de référence (return false si l'une valeur est nulle, maintenant le null == cas null a été traitée)
- Vérifier l'égalité de valeur avec
first.Equals(second)
La commande ne devrait pas importe si les deux les valeurs ont des implémentations d'égalité bien conduites, car l'égalité doit être implémentée de sorte que x.Equals(y)
implique y.Equals(x)
. Cependant, la documentation hors ligne que j'ai installée indique que first.Equals (second) (ou objA.equals (objB) pour utiliser le nom de paramètre réel) est spécifié. Le online documentation ne mentionne pas cela, assez intéressant.
Juste pour faire tout cela concret, la mise en œuvre pourrait ressembler à ceci:
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.
}
Il faut souligner que la principale différence entre le 'Object.Equals 'statique et le' first.Equals' (second) 'est que ce dernier ** échouera ** si' first' est une référence nulle. –