Surcharge de travail operator==
en C# est un sucre syntaxique pour appeler une fonction statique. La résolution des surcharges, comme toutes les résolutions de surcharges, se fait sur la base de l'attribut type statique de l'objet, et non du type dynamique. Prenons l'exemple de Object.ReferenceEquals
encore :
public static bool ReferenceEquals (Object objA, Object objB) {
return objA == objB;
}
Ici, le type statique de objA
et objB
est Object
. Le type dynamique peut être n'importe quoi ; une chaîne de caractères, un autre type défini par l'utilisateur, n'importe quoi ; cela n'a pas d'importance. La détermination du type operator==
est appelé est déterminé statiquement lorsque cette fonction est compilée, de sorte que vous obtenez toujours la fonction par défaut, non surchargée, fournie par le langage intégré. .NET pourrait simplement ne pas avoir de ReferenceEquals
et laisser les utilisateurs faire ((object)a) == ((object)b)
mais le fait d'avoir une fonction spécifique nommée pour dire ce qui se passe améliore la clarté.
Object.Equals
par contre, n'est qu'une fonction virtuelle. Par conséquent, qui Equals
est choisi est basé sur le type dynamique de l'objet à gauche de l'objet .Equals(
comme tout autre appel de fonction virtuelle.