Megosztás a következőn keresztül:


CA2225: Az operátorok túlterhelései alternatívokat neveztek el

Tulajdonság Érték
Szabályazonosító CA2225
Cím Az operátorok túlterhelései alternatívokat neveztek el
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 Nem

Ok

A rendszer túlterhelést észlelt, és a várt alternatív metódus nem található.

Ez a szabály alapértelmezés szerint csak külsőleg látható típusokat tekint meg, de ez konfigurálható.

Szabály leírása

Az operátorok túlterhelése lehetővé teszi szimbólumok használatát, amelyek egy típus számításait jelölik. Például egy olyan típus, amely túlterheli a pluszjelet + az összeadáshoz, általában egy másik tagot neveznek el Add. A megnevezett alternatív tag ugyanazokat a funkciókat biztosítja, mint az operátor. Ez a fejlesztők számára biztosított, akik olyan nyelveken programozzanak, amelyek nem támogatják a túlterhelt operátorokat.

Ez a szabály a következőket vizsgálja:

  • Implicit és explicit öntött operátorok egy típusban az elnevezett To<typename> és From<typename>a .

  • Az alábbi táblázatban felsorolt operátorok:

C# Visual Basic C++ Alternatív metódus neve
+ (bináris) + + (bináris) Add
+= += += Add
& And & Bitenkénti és
&= És= &= Bitenkénti és
| Vagy | Bitenkénti
|= Vagy= |= Bitenkénti
-- N/A -- Csökkentése
/ / / Osztás
/= /= /= Osztás
== = == Egyenlő
^ Xor ^ Xor
^= Xor= ^= Xor
> > > Összehasonlítás vagy összehasonlítás
>= >= >= Összehasonlítás vagy összehasonlítás
++ N/A ++ Növekmény
!= <> != Egyenlő
<< << << LeftShift
<<= <<= <<= LeftShift
< < < Összehasonlítás vagy összehasonlítás
<= <= <= Összehasonlítás vagy összehasonlítás
&& N/A && Logikai és logikai
|| N/A || Logikai
! N/A ! LogicalNot
% Mod % Mod vagy maradék
%= N/A %= Mod
* (bináris) * * Szorzás
*= N/A *= Szorzás
~ Not ~ OnesComplement
>> >> >> RightShift
>>= N/A >>= RightShift
- (bináris) - (bináris) - (bináris) Subtract
-= N/A -= Subtract
true IsTrue N/A IsTrue (tulajdonság)
- (unary) N/A - Semlegesítsék
+ (unary) N/A + Plusz ikon
false IsFalse False IsTrue (tulajdonság)

*A szám azt jelenti, hogy az operátor nem terhelhető túl a kijelölt nyelven.

Megjegyzés:

A C#-ban, ha egy bináris operátor túlterhelt, a megfelelő hozzárendelési operátor is implicit módon túlterhelődik.

Szabálysértések kijavítása

A szabály megsértésének kijavításához implementálja az operátor alternatív metódusát. Nevezze el az ajánlott alternatív névvel.

Mikor kell letiltani a figyelmeztetéseket?

Ne tiltsa le a szabály figyelmeztetését, ha megosztott kódtárat implementál. Az alkalmazások figyelmen kívül hagyhatják 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 CA2225
// The code that's violating the rule is on this line.
#pragma warning restore CA2225

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

További információ: Kódelemzési figyelmeztetések letiltása.

Kód konfigurálása elemzéshez

A következő beállítással konfigurálhatja, hogy a kódbázis mely részein futtassa ezt a szabályt.

Ezt a beállítást konfigurálhatja csak erre a szabályra, az összes szabályra, vagy az ebben a kategóriában (Használat) érvényes összes szabályra. További információ: Kódminőségi szabály konfigurációs beállításai.

Adott API-felületek belefoglalása

A kódbázis azon részeit konfigurálhatja, amelyeken futtathatja ezt a szabályt az akadálymentességük alapján. Ha például meg szeretné adni, hogy a szabály csak a nem nyilvános API-felületen fusson, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Példa

Az alábbi példa egy olyan struktúrát határoz meg, amely megsérti ezt a szabályt. A példa kijavításához adjon hozzá egy nyilvános Add(int x, int y) metódust a struktúrához.

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; } }
}