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