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 9 | 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>
enFrom<typename>
.De operators die worden vermeld in de volgende tabel:
C# | Visual Basic | C++ | Alternatieve methodenaam |
---|---|---|---|
+ (binair) | + | + (binair) | Toevoegen |
+= | += | += | Toevoegen |
& | And | & | BitwiseAnd |
&= | And= | &= | BitwiseAnd |
| | Or | | | 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
Notitie
Vervang het XXXX
deel van CAXXXX
door de id van de toepasselijke regel.
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; } }
}