CA1046: Gleichheitsoperator für Referenztypen nicht überladen
TypeName |
DoNotOverloadOperatorEqualsOnReferenceTypes |
CheckId |
CA1046 |
Kategorie (Category) |
Microsoft.Design |
Unterbrechende Änderung |
Breaking |
Ursache
Ein öffentlicher oder geschachtelter öffentlicher Verweistyp überlädt den Gleichheitsoperator.
Regelbeschreibung
Für Verweistypen ist die Standardimplementierung des Gleichheitsoperators fast immer zutreffend.Standardmäßig sind zwei Verweise nur dann gleich, wenn sie auf dasselbe Objekt zeigen.
Behandeln von Verstößen
Um einen Verstoß gegen diese Regel zu beheben, entfernen Sie die Implementierung des Gleichheitsoperators.
Wann sollten Warnungen unterdrückt werden?
Eine Warnung dieser Regel kann gefahrlos unterdrückt werden, wenn sich der Verweistyp wie ein integrierter Werttyp verhält.Wenn es sinnvoll ist, Additionen oder Subtraktionen mit Instanzen des Typs auszuführen, dann ist es wahrscheinlich richtig, den Gleichheitsoperator zu implementieren und den Regelverstoß zu unterdrücken.
Beispiel
Im folgenden Beispiel wird das Standardverhalten beim Vergleich zweier Verweise veranschaulicht.
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);
}
}
}
Die folgende Anwendung vergleicht einige Verweise.
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");
}
}
}
Folgende Ergebnisse werden zurückgegeben:
Verwandte Regeln
CA1013: Gleichheitsoperator beim Überladen von Addition und Subtraktion überladen
Siehe auch
Referenz
Weitere Ressourcen
Guidelines for Implementing Equals and the Equality Operator (==)