Ne pas surcharger l'opérateur égal (equals) sur les types référence
Mise à jour : novembre 2007
TypeName |
DoNotOverloadOperatorEqualsOnReferenceTypes |
CheckId |
CA1046 |
Catégorie |
Microsoft.CSharp |
Modification avec rupture |
Oui |
Cause
Un type référence public ou public imbriqué surcharge l'opérateur d'égalité.
Description de la règle
Pour les types référence, l'implémentation par défaut de l'opérateur d'égalité est presque toujours correcte. Par défaut, deux références sont égales uniquement si elles pointent sur le même objet.
Comment corriger les violations
Pour corriger une violation de cette règle, supprimez l'implémentation de l'opérateur d'égalité.
Quand supprimer les avertissements
Il est possible de supprimer sans risque un avertissement de cette règle quand le type référence se comporte comme un type valeur intégré. Si appliquer des additions ou des soustractions à des instances du type est pertinent, il est probablement correct d'implémenter l'opérateur d'égalité et de supprimer la violation.
Exemple
L'exemple suivant montre le comportement par défaut lors de la comparaison de deux références.
using System;
namespace DesignLibrary
{
public class MyReferenceType
{
private int a, b;
public MyReferenceType (int a, int b)
{
this.a = a;
this.b = b;
}
public override string ToString()
{
return String.Format("({0},{1})", a, b);
}
}
}
L'application suivante compare des références.
using System;
namespace DesignLibrary
{
public class ReferenceTypeEquality
{
public static void Main()
{
MyReferenceType a = new MyReferenceType(2,2);
MyReferenceType b = new MyReferenceType(2,2);
MyReferenceType c = a;
Console.WriteLine("a = new {0} and b = new {1} are equal? {2}", a,b, a.Equals(b)? "Yes":"No");
Console.WriteLine("c and a are equal? {0}", c.Equals(a)? "Yes":"No");
Console.WriteLine("b and a are == ? {0}", b == a ? "Yes":"No");
Console.WriteLine("c and a are == ? {0}", c == a ? "Yes":"No");
}
}
}
Cet exemple génère la sortie suivante :
a = new (2,2) and b = new (2,2) are equal? No
c and a are equal? Yes
b and a are == ? No
c and a are == ? Yes
Règles connexes
Surchargez l'opérateur égal lors de la surcharge de l'opérateur d'addition et de soustraction
Voir aussi
Référence
Indications concernant l'implémentation de Equals et de l'opérateur d'égalité (==)