Gleichheitsoperator bei Referenztypen nicht überladen
Aktualisiert: November 2007
TypeName |
DoNotOverloadOperatorEqualsOnReferenceTypes |
CheckId |
CA1046 |
Kategorie |
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.
Behandlung 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:
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
Verwandte Regeln
Überschreiben des Gleichheitsoperators beim Überladen von Add und Subtract
Siehe auch
Referenz
Richtlinien für die Implementierung der Equals-Methode und des Gleichheitsoperators (==)