Surcharges d'opérateurs
Mise à jour : novembre 2007
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
);
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 !=.
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 instruction 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) |
Add |
op_Addition |
- (binaire) |
Subtract |
op_Subtraction |
* (binaire) |
Multiply |
op_Multiply |
/ |
Divide |
op_Division |
% |
Mod |
op_Modulus |
^ |
Xor |
op_ExclusiveOr |
& (binaire) |
BitwiseAnd |
op_BitwiseAnd |
| |
BitwiseOr |
op_BitwiseOr |
&& |
And |
op_LogicalAnd |
|| |
Or |
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 |
*= |
Multiply |
op_MultiplicationAssignment |
-= |
Subtract |
op_SubtractionAssignment |
^= |
Xor |
op_ExclusiveOrAssignment |
<<= |
LeftShift |
op_LeftShiftAssignment |
%= |
Mod |
op_ModulusAssignment |
+= |
Add |
op_AdditionAssignment |
&= |
BitwiseAnd |
op_BitwiseAndAssignment |
|= |
BitwiseOr |
op_BitwiseOrAssignment |
, |
Comma |
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 instructions de conception, consultez le livre « Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries » de Krzysztof Cwalina et Brad Abrams, publié 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