CA1046 : Ne pas surcharger l'opérateur égal à sur les types référence
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 :
Règles connexes
Voir aussi
Référence
Instructions relatives à l'implémentation de Equals et de l'opérateur d'égalité (==)