Não sobrecarregar o operador equals em tipos de referência
TypeName |
DoNotOverloadOperatorEqualsOnReferenceTypes |
CheckId |
CA1046 |
Category (Categoria) |
Microsoft.Design |
Quebrando alterar |
Quebrando |
Causa
Um tipo de referência pública públicas ou aninhados sobrecarrega o operador de igualdade.
Descrição da regra
Para tipos de referência, a implementação padrão do operador de igualdade é quase sempre correta.Por padrão, duas referências são iguais somente se elas apontam para o mesmo objeto.
Como corrigir violações
Para corrigir uma violação dessa regra, remova a implementação do operador de igualdade.
Quando suprimir avisos
É seguro eliminar um aviso da regra quando o tipo de referência se comporta como um tipo de valor interno.Se for significativo para fazer a adição ou subtração em instâncias do tipo, é provavelmente correta implementar o operador de igualdade e suprimir a violação.
Exemplo
O exemplo a seguir demonstra o comportamento padrão quando estiver comparando 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 a seguir compara algumas 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.
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
Regras relacionadas
Sobrecarga de operador equals em sobrecarga adicionar e subtrair
Consulte também
Referência
Diretrizes para implementação é igual A e o operador de igualdade (==)