Instructions

Références

L'actualité

Librairie

L'information

Opérateurs

En C#, un opérateur est un élément de programme qui s'applique à un ou plusieurs opérandes dans une expression ou une instruction. Les opérateurs qui prennent un opérande, comme l'opérateur d'incrément (++) ou new, portent le nom d'opérateurs unaires.

Les opérateurs qui prennent deux opérandes, comme les opérateurs arithmétiques (+,-,*,/) portent le nom d'opérateur binaires.

Un opérateur, l'opérateur conditionnel (?:), prend trois opérandes et est le seul opérateur ternaire en C#.

L'instruction C# suivante contient un seul opérateur unaire et un seul opérande. L'opérateur d'incrément, ++, modifie la valeur de l'opérande y.

L'instruction C# suivante contient deux opérateurs binaires, chacun avec deux opérandes. L'opérateur d'assignation, =, a la variable de type entier y et l'expression 2 + 3 comme opérandes. L'expression 2 + 3 elle-même se compose de l'opérateur Addition et de deux opérandes, 2 et 3.


Opérateurs, évaluation et priorité des opérateurs

Un opérande peut être une expression valide qui est composée d'une longueur quelconque de code, et qui peut comporter plusieurs sous-expressions. Dans une expression qui contient plusieurs opérateurs, l'ordre dans lequel les opérateurs sont appliqués est déterminé par la priorité des opérateurs, l'associativitéet les parenthèses.

Chaque opérateur a une priorité définie. Dans une expression qui contient plusieurs opérateurs ayant différents niveaux de priorité, la priorité des opérateurs détermine l'ordre dans lequel les opérateurs sont évalués. Par exemple, l'instruction suivante assigne la valeur 3 à n1.

n1 = 11 - 2 * 4;

La multiplication est effectuée en premier lieu parce que la multiplication est prioritaire sur la soustraction.

Le tableau suivant répartit les opérateurs en catégories selon le type d'opération qu'ils exécutent. Les catégories sont répertoriées par ordre de priorité.

Opérateurs principaux
Expression Description
x.y Accès au membre
x?.y Accès au membre conditionnel.
f(x) Méthode et appel de délégué
a[x] Tableau et accès d'indexeur
a?[x] Tableau et accès d'indexeur conditionnels
x++ Post-incrémentation
x-- Post-décrémentation
new T(...) Création d'objet et de délégué
new T(...){...} Création d'objet avec l'initialiseur.
new {...} Initialiseur d'objet anonyme.
new T[...] Création de tableau.
typeof(T) Obtenir l'objet System.Type pour T
checked(x) Évaluer l'expression dans le contexte vérifié (checked)
unchecked(x) Évaluer l'expression dans le contexte non vérifié (unchecked)
default (T) Obtenir la valeur par défaut de type T
delegate {} Fonction anonyme (méthode anonyme)
Opérateurs unaires
Expression Description
+x Identité
-x Négation
!x Négation logique
~x Négation d'opération de bits
++x Pré-incrémentation
--x Pré-décrémentation
(T)x Convertir explicitement x en type T
Opérateurs unaires
Expression Description
* Multiplication
/ Division
% Reste
Opérateurs additifs
Expression Description
x + y Addition, concaténation de chaînes, combinaison de délégués
x - y Soustraction, suppression de délégué
Opérateurs de décalage
Expression Description
x << y Décalage à gauche
x >> y Décalage à droite
Opérateurs de type et relationnels
Expression Description
x < y Inférieur à
x > y Supérieur à
x <= y Inférieur ou égal à
x >= y Supérieur ou égal à
x is T Retourne la valeur true si x est de type T, false dans les autres cas
x as T Retourne x s'il a le type T ou null si x n'est pas de type T
Opérateurs d'égalité
Expression Description
x == y Égal
x != y Différence
Opérateurs logiques, conditionnels et Null
Category Expression Description
AND logique x & y Opération de bits entière AND, Boolean logique AND
XOR logique x ^ y XOR d'entiers au niveau du bit, XOR logique booléen
OR logique x | y OR d'entiers au niveau du bit, OR logique booléen
AND conditionnel x && y Évalue y uniquement si x est vrai
OR conditionnel x || y Évalue y uniquement si x est false
Fusion de Null x ?? o Prend la valeur y si x est null, sinon prend la valeur x
Conditionnel x ? y : z Prend la valeur de y si x est vrai, de z si x est false
Opérateurs anonymes et d'assignation
Expression Description
= Attribution
x op= y Assignation composée.
Prend en charge les opérateurs suivants : +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
(T x) => y Fonction anonyme (expression lambda)

L'associativité

Lorsque deux opérateurs ou plus, de même niveau de priorité figurent dans une expression, ils sont évalués sur la base de l'associativité. Les opérateurs associatifs sur leur gauche sont évalués dans l'ordre, de gauche à droite. Par exemple, x * y / z est évalué comme étant (x * y) / z. Les opérateurs associatifs sur leur droite sont évalués dans l'ordre, de droite à gauche. Par exemple, l'opérateur d'assignation est associatif sur sa droite. Dans le cas contraire, le code suivant génère une erreur.

Autre exemple, l'opérateur ternaire (?:) est associatif sur sa droite. La plupart des opérateurs binaires sont associatifs sur leur gauche.

Si les opérateurs présents dans une expression sont associatifs sur leur gauche ou associatifs sur leur droite, les opérandes de chaque expression sont évalués en premier, de gauche à droite. Les exemples suivants illustrent l'ordre d'évaluation des opérateurs et des opérandes.


Opérateurs anonymes et d'assignation

Instruction Ordre d'évaluation
a = b a, b, =
a = b + c a, b, c, +, =
a = b + c * d a, b, c, d, *, +, =
a = b * c + d a, b, c, *, d, +, =
a = b - c + d a, b, c, -, d, +, =
a += b -= c a, b, c, -=, +=

Ajout de parenthèses

Vous pouvez modifier l'ordre imposé par la priorité d'opérateur et l'associativité en utilisant des parenthèses. Par exemple, 2 + 3 * 2 correspond généralement à 8, car les opérateurs de multiplication ont la priorité sur les opérateurs additifs. Toutefois, si vous entrez une expression comme (2 + 3) * 2, l'addition est évaluée avant la multiplication, et le résultat est 10. Les exemples suivants illustrent l'ordre d'évaluation dans les expressions entre parenthèses. Comme dans les exemples précédents, l'évaluation des opérandes a lieu avant l'application de l'opérateur.

Opérateurs anonymes et d'assignation

Instruction Ordre d'évaluation
a = (b + c) * d a, b, c, +, d, *, =
a = b - (c + d) a, b, c, d, +, -, =
a = (b + c) * (d - e) a, b, c, +, d, e, -, *, =

Surcharge d'opérateur

Vous pouvez modifier le comportement des opérateurs pour les classes et les structs personnalisés. Ce processus est connu sous le nom de surcharge d'opérateur.