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