Share via


CA2224: Onderdrukking is gelijk aan overbelastingsoperator is gelijk aan

Eigenschappen Weergegeven als
Regel-id CA2224
Titel Onderdrukking is gelijk aan overbelastingsoperator is gelijk aan
Categorie Gebruik
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 9 Als suggestie

Oorzaak

Een openbaar type implementeert de gelijkheidsoperator, maar overschrijft System.Object.Equalsdeze niet.

Beschrijving van regel

De gelijkheidsoperator is bedoeld als een syntactisch handige manier om toegang te krijgen tot de functionaliteit van de Equals methode. Als u de gelijkheidsoperator implementeert, moet de logica ervan identiek zijn aan die van Equals.

Notitie

Deze regel is alleen van toepassing op Visual Basic-code. De C#-compiler genereert een afzonderlijke waarschuwing, CS0660.

Schendingen oplossen

Als u een schending van deze regel wilt oplossen, moet u de implementatie van de gelijkheidsoperator verwijderen of overschrijven Equals en de twee methoden dezelfde waarden laten retourneren. Als de gelijkheidsoperator geen inconsistent gedrag introduceert, kunt u de schending oplossen door een implementatie van Equals die methode Equals in de basisklasse aan te roepen.

Wanneer waarschuwingen onderdrukken

Het is veilig om een waarschuwing van deze regel te onderdrukken als de gelijkheidsoperator dezelfde waarde retourneert als de overgenomen implementatie van Equals. De voorbeelden in dit artikel bevatten een type dat een waarschuwing van deze regel veilig kan onderdrukken.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

#pragma warning disable CA2224
// The code that's violating the rule is on this line.
#pragma warning restore CA2224

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.

[*.{cs,vb}]
dotnet_diagnostic.CA2224.severity = none

Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.

Opmerking

In het volgende voorbeeld ziet u een klasse (verwijzingstype) die deze regel schendt.

' 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

In het volgende voorbeeld wordt de schending opgelost door deze te overschrijven 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

Zie ook