CA2224: Reemplazar Equals al sobrecargar operadores de igualdad
Propiedad | Value |
---|---|
Identificador de la regla | CA2224 |
Título | Reemplazar Equals al sobrecargar operadores de igualdad |
Categoría | Uso |
La corrección es problemática o no problemática | Poco problemático |
Habilitado de forma predeterminada en .NET 9 | Como sugerencia |
Causa
Un tipo público implementa el operador de igualdad, pero no reemplaza System.Object.Equals.
Descripción de la regla
El operador de igualdad pretende ser una manera sintácticamente cómoda de acceder a la funcionalidad del método Equals. Si implementa el operador de igualdad, su lógica debe ser idéntica a la de Equals.
Nota
Esta regla solo se aplica al código de Visual Basic. El compilador de C# genera una advertencia independiente, CS0660.
Cómo corregir infracciones
Para corregir una infracción de esta regla, debe quitar la implementación del operador de igualdad, o bien reemplazar Equals y hacer que los dos métodos devuelvan los mismos valores. Si el operador de igualdad no introduce un comportamiento incoherente, puede corregir la infracción proporcionando una implementación de Equals que llama al método Equals en la clase base.
Cuándo suprimir las advertencias
Una advertencia de esta regla se puede suprimir si el operador de igualdad devuelve el mismo valor que la implementación heredada de Equals. Los ejemplos de este artículo incluyen un tipo en el que se podría suprimir sin problemas una advertencia de esta regla.
Supresión de una advertencia
Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.
#pragma warning disable CA2224
// The code that's violating the rule is on this line.
#pragma warning restore CA2224
Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none
del archivo de configuración.
[*.{cs,vb}]
dotnet_diagnostic.CA2224.severity = none
Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.
Ejemplo
En el ejemplo siguiente se muestra una clase (tipo de referencia) que infringe esta regla.
' This class violates the rule.
Public Class Point
Public Property X As Integer
Public Property Y As Integer
Public Sub New(x As Integer, y As Integer)
Me.X = x
Me.Y = y
End Sub
Public Overrides Function GetHashCode() As Integer
Return HashCode.Combine(X, Y)
End Function
Public Shared Operator =(pt1 As Point, pt2 As Point) As Boolean
If pt1 Is Nothing OrElse pt2 Is Nothing Then
Return False
End If
If pt1.GetType() <> pt2.GetType() Then
Return False
End If
Return pt1.X = pt2.X AndAlso pt1.Y = pt2.Y
End Operator
Public Shared Operator <>(pt1 As Point, pt2 As Point) As Boolean
Return Not pt1 = pt2
End Operator
End Class
En el ejemplo siguiente se corrige la infracción mediante el reemplazo de System.Object.Equals.
' This class satisfies the rule.
Public Class Point
Public Property X As Integer
Public Property Y As Integer
Public Sub New(x As Integer, y As Integer)
Me.X = x
Me.Y = y
End Sub
Public Overrides Function GetHashCode() As Integer
Return HashCode.Combine(X, Y)
End Function
Public Overrides Function Equals(obj As Object) As Boolean
If obj = Nothing Then
Return False
End If
If [GetType]() <> obj.GetType() Then
Return False
End If
Dim pt As Point = CType(obj, Point)
Return X = pt.X AndAlso Y = pt.Y
End Function
Public Shared Operator =(pt1 As Point, pt2 As Point) As Boolean
' Object.Equals calls Point.Equals(Object).
Return Object.Equals(pt1, pt2)
End Operator
Public Shared Operator <>(pt1 As Point, pt2 As Point) As Boolean
' Object.Equals calls Point.Equals(Object).
Return Not Object.Equals(pt1, pt2)
End Operator
End Class
Reglas relacionadas
- CA1046: No sobrecargar el operador de igualdad en los tipos de referencia
- CA2218: Invalidar el método GetHashCode al invalidar el método Equals
- CA2225: Las sobrecargas del operador tienen alternativas con nombre
- CA2226: Los operadores deben tener sobrecargas simétricas
- CA2231: Sobrecargar el operador equals al invalidar ValueType.Equals