Share via


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 (==)

Object.Equals