Compartir a través de


CA1046: No sobrecargar el operador de igualdad en los tipos de referencia

Nombre de tipo

DoNotOverloadOperatorEqualsOnReferenceTypes

Identificador de comprobación

CA1046

Categoría

Microsoft.Design

Cambio problemático

Motivo

Un tipo de referencia público o anidado público sobrecarga el operador de igualdad.

Descripción de la regla

Para los tipos de referencia, la implementación predeterminada del operador de igualdad casi siempre es correcta.De manera predeterminada, dos referencias son iguales sólo si señalan al mismo objeto.

Cómo corregir infracciones

Para corregir una infracción de esta regla, quite la implementación del operador de igualdad.

Cuándo suprimir advertencias

Es seguro suprimir una advertencia de esta regla cuando el tipo de referencia se comporte como tipo de valor integrado.Si tiene sentido realizar sumas o restas en instancias del tipo, es probable que sea correcto implementar el operador de igualdad y suprimir la infracción.

Ejemplo

El ejemplo siguiente muestra el comportamiento predeterminado al comparar dos referencias.

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);
      }
   }
}

La aplicación siguiente compara algunas referencias.

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");     
       }
    }
}

Este ejemplo produce el siguiente resultado.

  
  
  
  
  

Reglas relacionadas

CA1013: El operador de sobrecarga es igual que la suma y resta de sobrecarga

Vea también

Referencia

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

Object.Equals