Surcharges d'opérateurs
Les surcharges d'opérateurs permettent de combiner et de comparer des types à l'aide d'opérateurs tels que « + », « - », « = » et « ! = ». En ajoutant des surcharges d'opérateurs à un type, vous permettez aux développeurs d'utiliser le type comme s'il s'agissait d'un type primitif intégré. La surcharge d'opérateur doit être autorisée uniquement lorsque la signification de l'opération est intuitive pour le type (par exemple, pour prendre en charge l'addition de deux instances d'un type qui représente une valeur numérique). La surcharge d'opérateur ne doit pas être utilisée pour fournir un raccourci syntaxique aux opérations non intuitives.
L'exemple suivant illustre la signature de l'opération d'addition de la classe DateTime.
[Visual Basic]
Public Shared Function op_Addition(ByVal d As DateTime, _
ByVal t As TimeSpan _
) As DateTime
[C#]
public static DateTime op_Addition(
DateTime d,
TimeSpan t
);
Évitez de définir des surcharges d'opérateurs, sauf dans les types qui doivent fonctionner comme des types primitifs (intégrés).
Envisagez de définir des surcharges d'opérateurs dans un type qui doit fonctionner comme un type primitif.
Par exemple, String définit l'opérateur == et l'opérateur !=.
Définissez des surcharges d'opérateurs dans des structures représentant des nombres (par exemple, System.Decimal).
Restez simple lorsque vous définissez des surcharges d'opérateurs. La surcharge d'opérateur est utile dans les cas où le résultat de l'opération est immédiatement connu. Par exemple, il est logique de soustraire un objet System.DateTime d'un autre objet System.DateTime et d'obtenir un objet System.TimeSpan. En revanche, il n'est pas approprié d'utiliser l'opérateur d'union logique pour unir deux requêtes de base de données ou d'utiliser un opérateur de décalage pour écrire dans un flux.
Ne fournissez pas de surcharges d'opérateurs sauf si l'une des opérandes au moins est du type qui définit la surcharge.
Le compilateur C# applique cette indication.
Surchargez les opérateurs de manière symétrique.
Par exemple, si vous surchargez l'opérateur d'égalité, vous devez aussi surcharger l'opérateur d'inégalité. De même, si vous surchargez l'opérateur « inférieur à », vous devez également surcharger l'opérateur « supérieur à ».
Envisagez de fournir des méthodes qui portent des noms conviviaux correspondant à chaque opérateur surchargé.
Vous devez respecter cette règle pour être conforme CLS. Le tableau suivant contient une liste des symboles d'opérateur, des méthodes de remplacement correspondantes et des noms d'opérateurs.
Symbole d'opérateur C# |
Nom de la méthode de remplacement |
Nom de l'opérateur |
---|---|---|
Non défini |
ToXxx ou FromXxx |
op_Implicit |
Non défini |
ToXxx ou FromXxx |
op_Explicit |
+ (binaire) |
Ajouter |
op_Addition |
- (binaire) |
Subtract |
op_Subtraction |
* (binaire) |
Multiplier |
op_Multiply |
/ |
Divide |
op_Division |
% |
Mod |
op_Modulus |
^ |
Xor |
op_ExclusiveOr |
& (binaire) |
BitwiseAnd |
op_BitwiseAnd |
| |
BitwiseOr |
op_BitwiseOr |
&& |
Et |
op_LogicalAnd |
|| |
Ou |
op_LogicalOr |
= |
Assign |
op_Assign |
<< |
LeftShift |
op_LeftShift |
>> |
RightShift |
op_RightShift |
Non défini |
LeftShift |
op_SignedRightShift |
Non défini |
RightShift |
op_UnsignedRightShift |
== |
Equals |
op_Equality |
> |
CompareTo |
op_GreaterThan |
< |
CompareTo |
op_LessThan |
!= |
Equals |
op_Inequality |
>= |
CompareTo |
op_GreaterThanOrEqual |
<= |
CompareTo |
op_LessThanOrEqual |
*= |
Multiplier |
op_MultiplicationAssignment |
-= |
Subtract |
op_SubtractionAssignment |
^= |
Xor |
op_ExclusiveOrAssignment |
<<= |
LeftShift |
op_LeftShiftAssignment |
%= |
Mod |
op_ModulusAssignment |
+= |
Ajouter |
op_AdditionAssignment |
&= |
BitwiseAnd |
op_BitwiseAndAssignment |
|= |
BitwiseOr |
op_BitwiseOrAssignment |
, |
Virgule |
op_Comma |
/= |
Divide |
op_DivisionAssignment |
-- |
Decrement |
op_Decrement |
++ |
Increment |
op_Increment |
- (unaire) |
Negate |
op_UnaryNegation |
+ (unaire) |
Plus |
op_UnaryPlus |
~ |
OnesComplement |
op_OnesComplement |
Portions Copyright 2005 Microsoft Corporation. Tous droits réservés.
Portions Copyright Addison-Wesley Corporation. Tous droits réservés.
Pour plus d'informations sur les règles de conception, consultez « règles de conception d'infrastructure : Conventions idiomes et modèles carnet de bibliothèques réutilisables framework » Krzysztof Cwalina et Brad Abrams, publiés par Addison-Wesley, 2005.
Voir aussi
Autres ressources
Instructions de conception des membres
Instructions de conception pour le développement de bibliothèques de classes