No sobrecargar el operador Equals en tipos de referencia
Actualización: noviembre 2007
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.
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
Reglas relacionadas
Sobrecargar el operador de igualdad al sobrecargar los operadores de suma y resta
Vea también
Referencia
Instrucciones para implementar Equals y el operador de igualdad (==)