CA2224: A felülbírálás egyenlő a túlterhelési operátoron
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA2224 |
Cím | A felülbírálás egyenlő a túlterhelési operátoron |
Kategória | Használat |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Javaslatként |
Ok
A nyilvános típus implementálja az egyenlőségi operátort, de nem bírálja felül System.Object.Equals.
Szabály leírása
Az egyenlőségi operátor a módszer funkcióinak Equals elérésére szolgáló szintaktikailag kényelmes módszer. Ha az egyenlőségi operátort implementálja, annak logikájának meg kell egyeznie Equalsa .
Megjegyzés:
Ez a szabály csak a Visual Basic-kódra vonatkozik. A C#-fordító külön figyelmeztetést hoz létre: CS0660.
Szabálysértések kijavítása
A szabály megsértésének kijavításához távolítsa el az egyenlőségi operátor implementációját, vagy felülbírálja Equals , és a két metódus ugyanazokat az értékeket adja vissza. Ha az egyenlőségi operátor nem vezet be inkonzisztens viselkedést, kijavíthatja a szabálysértést az alaposztály metódusát meghívó Equals metódus implementációjának Equals megadásával.
Mikor kell letiltani a figyelmeztetéseket?
A szabály figyelmeztetését nyugodtan letilthatja, ha az egyenlőségi operátor ugyanazt az értéket adja vissza, mint a szabály öröklött implementációja Equals. A cikkben szereplő példák olyan típust tartalmaznak, amely biztonságosan letilthatja a szabály figyelmeztetését.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA2224
// The code that's violating the rule is on this line.
#pragma warning restore CA2224
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none
a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA2224.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Példa
Az alábbi példa egy olyan osztályt (referenciatípust) mutat be, amely megsérti ezt a szabályt.
' 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
Az alábbi példa felülírással oldja meg a szabálysértést 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
Kapcsolódó szabályok
- CA1046: Ne terhelje túl az operátort a referenciatípusoknál
- CA2218: A GetHashCode felülbírálása egyenlők felülbírálásakor
- CA2225: Az operátorok túlterhelései alternatívokat neveztek el
- CA2226: Az operátoroknak szimmetrikus túlterhelésekkel kell rendelkezniük
- CA2231: A túlterhelési operátor egyenlő a ValueType.Equals felülbírálásával
Kapcsolódó információk
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: