Partager via


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