Partager via


CA2225 : Les surcharges d'opérateur offrent d'autres méthodes nommées

TypeName

OperatorOverloadsHaveNamedAlternates

CheckId

CA2225

Catégorie

Microsoft.Usage

Modification avec rupture

Modification sans rupture

Cause

Une surcharge d'opérateur a été détectée, et la méthode de substitution nommée attendue n'a pas été trouvée.

Description de la règle

La surcharge d'opérateur autorise l'utilisation de symboles pour représenter des calculs pour un type. Par exemple, un type qui surcharge le symbole plus (+) pour l'addition aurait en général un membre de substitution nommé 'Add'. Le membre de substitution nommé donne accès aux mêmes fonctionnalités que l'opérateur. Il est fourni aux développeurs qui programment dans les langages qui ne prennent pas en charge les opérateurs surchargés.

Cette règle examine les opérateurs répertoriés dans le tableau suivant.

C#

Visual Basic

C++

Nom de substitution

+ (binaire)

+

+ (binaire)

Ajouter

+=

+=

+=

Ajouter

&

And

&

BitwiseAnd

&=

And=

&=

BitwiseAnd

|

Or

|

BitwiseOr

|=

Or=

|=

BitwiseOr

--

N/A

--

Decrement

/

/

/

Divide

/=

/=

/=

Divide

==

=

==

Equals

^

Xor

^

Xor

^=

Xor=

^=

Xor

>

>

>

Comparaison

>=

>=

>=

Comparaison

++

N/A

++

Increment

!=

<>

!=

Equals

<<

<<

<<

LeftShift

<<=

<<=

<<=

LeftShift

<

<

<

Comparaison

<=

<=

<=

Comparaison

&&

N/A

&&

LogicalAnd

||

N/A

||

LogicalOr

!

N/A

!

LogicalNot

%

Mod

%

Mod or Remainder

%=

N/A

%=

Mod

* (binaire)

*

*

Multiplier

*=

N/A

*=

Multiplier

~

Not

~

OnesComplement

>>

>>

>>

RightShift

>>=

N/A

>>=

RightShift

- (binaire)

- (binaire)

- (binaire)

Subtract

-=

N/A

-=

Subtract

true

IsTrue

N/A

IsTrue (Property)

- (unaire)

N/A

-

Negate

+ (unaire)

N/A

+

Plus

false

IsFalse

False

IsTrue (Property)

N/D == ne peut pas être surchargé dans la langue sélectionnée.

La règle vérifie également les opérateurs de cast implicites et explicites dans un type (SomeType) en vérifiant la présence de méthodes nommées ToSomeType et FromSomeType.

En C#, lorsqu'un opérateur binaire est surchargé, l'opérateur d'assignation correspondant (s'il y en a un) est, lui aussi, implicitement surchargé.

Comment corriger les violations

Pour corriger une violation de cette règle, implémentez la méthode de substitution destinée à l'opérateur ; nommez-la à l'aide du nom de substitution recommandé.

Quand supprimer les avertissements

Ne supprimez pas d'avertissement de cette règle si vous implémentez une bibliothèque partagée. Les applications peuvent ignorer un avertissement de cette règle.

Exemple

L'exemple suivant définit une structure qui enfreint cette règle. Pour corriger l'exemple, ajoutez une méthode Add(int x, int y) publique à la structure.

using System;

namespace UsageLibrary
{
    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;}}
    }
}

Règles connexes

CA1046 : Ne pas surcharger l'opérateur égal à sur les types référence

CA2226 : Les opérateurs doivent contenir des surcharges symétriques

CA2224 : Remplacez Equals au moment de surcharger l'opérateur égal

CA2218 : Remplacez GetHashCode au moment de remplacer Equals

CA2231 : Surchargez l'opérateur égal (equals) en remplaçant ValueType.Equals