Compartilhar via


CA1046: não sobrecarregar igualdades de operador em tipos de referência

TypeName

DoNotOverloadOperatorEqualsOnReferenceTypes

CheckId

CA1046

Categoria

Microsoft.Design

Alteração Significativa

Quebra

Causa

Um público ou um tipo público aninhado de referência sobrecarregam o operador de igualdade.

Descrição da Regra

Para tipos de referência, a implementação padrão do operador de igualdade está quase sempre correta.Por padrão, duas referências são iguais apenas se apontam para o mesmo objeto.

Como Corrigir Violações

Para corrigir uma violação desta regra, remova a implementação do operador de igualdade.

Quando Suprimir Alertas

É seguro suprimir um aviso desta regra quando o tipo de referência se comporta como um tipo de valor interno.Se for significativo fazer a adição ou subtração em instâncias do tipo, provavelmente está correto implementar o operador de igualdade e suprimir a violação.

Exemplo

O exemplo a seguir demonstra o comportamento padrão durante a comparação de duas referências.

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

O aplicativo seguir compara referências.

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

O exemplo produz a seguinte saída.

              

Regras Relacionadas

CA1013: sobrecarregar igualdades de operador em add e subtract de sobrecarga

Consulte também

Referência

Object.Equals

Outros recursos

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