CA1046: Gleichheitsoperator für Referenztypen nicht überladen

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.

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

Guidelines for Implementing Equals and the Equality Operator (==)

Object.Equals