Delen via


CA2225: Overbelastingen van operatoren hebben alternatieve namen

Eigenschappen Weergegeven als
Regel-id CA2225
Titel Overbelastingen van operatoren hebben benoemde alternatieven
Categorie Gebruik
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 8 Nee

Oorzaak

Er is een overbelasting van de operator gedetecteerd en de verwachte alternatieve methode is niet gevonden.

Deze regel kijkt standaard alleen naar extern zichtbare typen, maar dit kan worden geconfigureerd.

Beschrijving van regel

Met overbelasting van operatoren kan het gebruik van symbolen berekeningen voor een type vertegenwoordigen. Een type dat bijvoorbeeld het plusteken + voor optellen overbelast, heeft meestal een alternatief lid met de naam Add. Het benoemde alternatieve lid biedt toegang tot dezelfde functionaliteit als de operator. Het is beschikbaar voor ontwikkelaars die programma's uitvoeren in talen die geen overbelaste operators ondersteunen.

Met deze regel wordt het volgende onderzocht:

  • Impliciete en expliciete cast-operators in een type door te controleren op methoden met de naam To<typename> en From<typename>.

  • De operators die worden vermeld in de volgende tabel:

C# Visual Basic C++ Alternatieve methodenaam
+ (binair) + + (binair) Toevoegen
+= += += Toevoegen
& And & BitwiseAnd
&= And= &= BitwiseAnd
| Of | BitwiseOr
|= Of= |= BitwiseOr
-- N.v.t. -- Afschaking
/ / / Delen
/= /= /= Delen
== = == Is gelijk aan
^ Xor ^ Xor
^= Xor= ^= Xor
> > > CompareTo of Compare
>= >= >= CompareTo of Compare
++ N.v.t. ++ Verhoging
!= <> != Is gelijk aan
<< << << LeftShift
<<= <<= <<= LeftShift
< < < CompareTo of Compare
<= <= <= CompareTo of Compare
&& N.v.t. && LogicalAnd
|| N.v.t. || LogicalOr
! N.v.t. ! LogicalNot
% Mod % Mod of restgetal
%= N.v.t. %= Mod
* (binair) * * Vermenigvuldigen
*= N.v.t. *= Vermenigvuldigen
~ Not ~ OnesComplement
>> >> >> RightShift
>>= N.v.t. >>= RightShift
- (binair) - (binair) - (binair) Aftrekken
-= N.v.t. -= Aftrekken
true IsTrue N.v.t. IsTrue (eigenschap)
- (unaire) N.v.t. - Negate
+ (unaire) N.v.t. + Plus
false IsFalse Onwaar IsTrue (eigenschap)

*N/B betekent dat de operator niet kan worden overbelast in de geselecteerde taal.

Notitie

Wanneer in C# een binaire operator overbelast is, wordt de bijbehorende toewijzingsoperator, indien aanwezig, ook impliciet overbelast.

Schendingen oplossen

Als u een schending van deze regel wilt oplossen, implementeert u de alternatieve methode voor de operator. Geef deze een naam met behulp van de aanbevolen alternatieve naam.

Wanneer waarschuwingen onderdrukken

Onderdrukt geen waarschuwing van deze regel als u een gedeelde bibliotheek implementeert. Toepassingen kunnen een waarschuwing van deze regel negeren.

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 CA2225
// The code that's violating the rule is on this line.
#pragma warning restore CA2225

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.CA2225.severity = none

Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.

Code configureren om te analyseren

Gebruik de volgende optie om te configureren op welke onderdelen van uw codebase deze regel moet worden uitgevoerd.

U kunt deze optie configureren voor alleen deze regel, voor alle regels waarop deze van toepassing is, of voor alle regels in deze categorie (gebruik) waarop deze van toepassing is. Zie de configuratieopties voor de codekwaliteitsregel voor meer informatie.

Specifieke API-oppervlakken opnemen

U kunt instellen op welke onderdelen van uw codebase deze regel moet worden uitgevoerd, op basis van hun toegankelijkheid. Als u bijvoorbeeld wilt opgeven dat de regel alleen moet worden uitgevoerd op het niet-openbare API-oppervlak, voegt u het volgende sleutel-waardepaar toe aan een .editorconfig-bestand in uw project:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Opmerking

In het volgende voorbeeld wordt een structuur gedefinieerd die deze regel schendt. Als u het voorbeeld wilt corrigeren, voegt u een openbare Add(int x, int y) methode toe aan de structuur.

public struct Point
{
    private int x, y;

    public Point(int x, int y)
    {
        this.x = x;
        this.y = y;
    }

    public override string ToString()
    {
        return String.Format("({0},{1})", x, y);
    }

    // Violates rule: OperatorOverloadsHaveNamedAlternates.
    public static Point operator +(Point a, Point b)
    {
        return new Point(a.x + b.x, a.y + b.y);
    }

    public int X { get { return x; } }
    public int Y { get { return x; } }
}