Partager via


Opérateurs surchargeables (Guide de programmation C#)

Mise à jour : novembre 2007

C# permet aux types définis par l'utilisateur de surcharger des opérateurs en définissant des fonctions de membre statique à l'aide du mot clé operator. Tous les opérateurs ne peuvent pas être surchargés et d'autres présentent des limitations, comme l'indique le tableau suivant :

Opérateurs

Surchargeabilité

+, -, !, ~, ++, --, true, false

Ces opérateurs unaires peuvent être surchargés.

+, -, *, /, %, &, |, ^, <<, >>

Ces opérateurs binaires peuvent être surchargés.

==, !=, <, >, <=, >=

Les opérateurs de comparaison peuvent être surchargés (mais consultez la remarque qui suit cette table).

&&, ||

Les opérateurs logiques conditionnels ne peuvent pas être surchargés, mais ils sont évalués à l'aide de & et |, qui peuvent être surchargés.

[]

L'opérateur d'indexation de tableau ne peut pas être surchargé, mais vous pouvez définir des indexeurs.

()

L'opérateur de cast ne peut pas être surchargé, mais vous pouvez définir de nouveaux opérateurs de conversion (consultez explicit et implicit).

+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

Les opérateurs d'assignation ne peuvent pas être surchargés, mais +=, par exemple, est évalué à l'aide de +, qui peut être surchargé.

=, ., ?:, ->, new, is, sizeof, typeof

Ces opérateurs ne peuvent pas être surchargés.

Remarque :

Les opérateurs de comparaison, s'ils sont surchargés, doivent l'être en paires. En conséquence, si == est surchargé, != doit l'être également. L'inverse est également vrai, comme pour < et >, et pour <= et >=.

Surcharger un opérateur sur une classe personnalisée requiert la création d'une méthode sur la classe avec la signature appropriée. La méthode doit être nommée "opérateur X" où X est le nom ou le symbole de l'opérateur qui est surchargé. Les opérateurs unaires ont un paramètre ; les opérateurs binaires ont deux paramètres. Dans chaque cas, un paramètre doit être du même type que la classe ou struct qui déclare l'opérateur, comme le montre l'exemple suivant :

public static Complex operator +(Complex c1, Complex c2)

Pour plus d'informations, consultez Comment : utiliser la surcharge d'opérateur pour créer une classe de nombres complexes (Guide de programmation C#).

Voir aussi

Concepts

Guide de programmation C#

Référence

Instructions, expressions et opérateurs (Guide de programmation C#)

Opérateurs (Guide de programmation C#)

Opérateurs C#

Autres ressources

Why are overloaded operators always static in C#?