Les surcharges d'opérateur offrent d'autres méthodes nommées
Mise à jour : novembre 2007
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) |
Add |
+= |
+= |
+= |
Add |
& |
And |
& |
BitwiseAnd |
&= |
And= |
&= |
BitwiseAnd |
| |
Or |
| |
BitwiseOr |
|= |
Or= |
|= |
BitwiseOr |
-- |
N/D |
-- |
Decrement |
/ |
/ |
/ |
Divide |
/= |
/= |
/= |
Divide |
== |
= |
== |
Equals |
^ |
Xor |
^ |
Xor |
^= |
Xor= |
^= |
Xor |
> |
> |
> |
Compare |
>= |
>= |
>= |
Compare |
++ |
N/D |
++ |
Increment |
!= |
<> |
!= |
Equals |
<< |
<< |
<< |
LeftShift |
<<= |
<<= |
<<= |
LeftShift |
< |
< |
< |
Compare |
<= |
<= |
<= |
Compare |
&& |
N/D |
&& |
LogicalAnd |
|| |
N/D |
|| |
LogicalOr |
! |
N/D |
! |
LogicalNot |
% |
Mod |
% |
Mod or Remainder |
%= |
N/D |
%= |
Mod |
* (binaire) |
* |
* |
Multiply |
*= |
N/D |
*= |
Multiply |
~ |
Not |
~ |
OnesComplement |
>> |
>> |
>> |
RightShift |
>>= |
N/D |
>>= |
RightShift |
- (binaire) |
- (binaire) |
- (binaire) |
Subtract |
-= |
N/D |
-= |
Subtract |
true |
IsTrue |
N/D |
IsTrue (Property) |
- (unaire) |
N/D |
- |
Negate |
+ (unaire) |
N/D |
+ |
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.
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
Ne pas surcharger l'opérateur égal (equals) sur les types référence
Les opérateurs doivent contenir des surcharges symétriques
Subsituez Equals au moment de surcharger l'opérateur égal (equals)
Substituez GetHashCode au moment de substituer Equals
Surcharger l'opérateur égal (equals) en remplaçant ValueType.Equals