Opérateurs (guide de programmation C#)
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.
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.
y = 2 + 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 |
f(x) |
Méthode et appel de délégué |
a[x] |
Tableau et accès d'indexeur |
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. Consultez Initialiseurs d'objets et de collection (Guide de programmation C#). |
new {...} |
Initialiseur d'objet anonyme. Consultez Types anonymes (Guide de programmation C#). |
new T[...] |
Création de tableau. Consultez Tableaux (guide de programmation C#). |
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 multiplicatifs
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
Catégorie |
Expression |
Description |
---|---|---|
AND logique |
x & y |
Opération de bits entière AND, Boolean logique AND |
XOR logique |
x ^ y |
Opération de bits entière XOR, Boolean logique XOR |
OR logique |
x | y |
Opération de bits entière OR, Boolean logique OR |
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 ?? y |
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 |
---|---|
Assignation |
|
x op= y |
Assignation composée. Prend en charge ces opérateurs : +=, -=, *=, /=, %=, &=, |=, !=, <<=, >>= |
(T x) => y |
Fonction anonyme (expression lambda) |
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.
int a, b, c;
c = 1;
// The following two lines are equivalent.
a = b = c;
a = (b = c);
// The following line, which forces left associativity, causes an error.
//(a = b) = c;
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.
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.
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. Pour plus d'informations, consultez Opérateurs surchargeables (Guide de programmation C#).
Rubriques connexes
Pour plus d'informations, consultez Mots clés des opérateurs (référence C#) et Opérateurs C#.
Voir aussi
Référence
Instructions, expressions et opérateurs (guide de programmation C#)