Operatori (Guida per programmatori C#)
Aggiornamento: Luglio 2008
In C# un operatore è un termine o un simbolo che accetta come input una o più espressioni, ovvero operandi, e restituisce un valore. Gli operatori che accettano un unico operando, ad esempio l'operatore di incremento (++) o new, sono denominati operatori unari. Quelli che accettano due operandi, ad esempio gli operatori aritmetici (+, -, *, /), sono denominati operatori binari. L'operatore condizionale (?:) accetta tre operandi ed è l'unico operatore ternario disponibile in C#.
L'istruzione C# riportata di seguito contiene un unico operatore unario e un unico operando. L'operatore di incremento ++ modifica il valore dell'operando y.:
y++;
L'istruzione C# riportata di seguito contiene due operatori binari, ciascuno con due operandi. L'operatore di assegnazione = ha come operandi la variabile integer y e l'espressione 2 + 3. L'espressione 2 + 3 contiene a sua volta l'operatore di addizione e utilizza i valori integer 2 e 3 come operandi:
y = 2 + 3;
Un operando può essere un'espressione valida di qualsiasi dimensione, costituita da un numero qualsiasi di altre operazioni. Quando un'espressione viene valutata, per prima cosa il compilatore valuta tutti gli operandi da sinistra a destra. Una volta completata la valutazione di tutti gli operandi, vengono valutati gli operatori in un ordine specifico noto come precedenza tra gli operatori. Nella tabella riportata di seguito gli operatori sono suddivisi in categorie in base all'operazione che eseguono. Le categorie sono elencate in ordine di precedenza.
Operatori primari
Espressione |
Descrizione |
---|---|
x.y |
Accesso a membri |
f(x) |
Chiamata a metodi e delegati |
a[x] |
Accesso a matrici e indicizzatori |
x++ |
Post-incremento |
x-- |
Post-decremento |
new T(...) |
Creazione di oggetti e delegati |
new T(...){...} |
Creazione di oggetti con inizializzatore. Vedere Inizializzatori di oggetto e di insieme (Guida per programmatori C#). |
new {...} |
Inizializzatore di oggetti anonimi. Vedere Tipi anonimi (Guida per programmatori C#). |
new T[...] |
Creazione di matrici. Vedere Matrici (Guida per programmatori C#). |
typeof(T) |
Ottenere l'oggetto System.Type per T |
checked(x) |
Valutare l'espressione in un contesto controllato (checked) |
unchecked(x) |
Valutare l'espressione in un contesto non controllato (unchecked) |
default (T) |
Ottenere il valore predefinito del tipo T |
delegate {} |
Funzione anonima (metodo anonimo) |
Operatori unari
Espressione |
Descrizione |
---|---|
+x |
Identità |
-x |
Negazione |
!x |
Negazione logica |
~x |
Negazione bit per bit |
++x |
Pre-incremento |
--x |
Pre-decremento |
(T)x |
Convertire in modo esplicito x nel tipo T |
Operatori di moltiplicazione (*)
Espressione |
Descrizione |
---|---|
Moltiplicazione |
|
Divisione |
|
Resto |
Operatori di addizione
Espressione |
Descrizione |
---|---|
x + y |
Addizione, concatenazione di stringhe, combinazione di delegati |
x - y |
Sottrazione, rimozione di delegati |
Operatori shift
Espressione |
Descrizione |
---|---|
x << y |
Spostamento a sinistra |
x >> y |
Spostamento a destra |
Operatori relazionali e operatori di tipo
Espressione |
Descrizione |
---|---|
x < y |
Minore di |
x > y |
Maggiore di |
x <= y |
Minore o uguale a |
x >= y |
Maggiore o uguale a |
x is T |
Restituisce true se x è un oggetto T; in caso contrario, falso |
x as T |
Restituisce x tipizzato come T oppure null se x non è un oggetto T |
Operatori di uguaglianza
Espressione |
Descrizione |
---|---|
x == y |
Uguale |
x != y |
Non uguale |
Operatori di assegnazione e operatori anonimi
Espressione |
Descrizione |
---|---|
Assegnazione |
|
x op= y |
Assegnazione composta, supporta questi operatori: +=, -=, *=, /=, %=, &=, |=, !=, <<=, >>= |
(T x) => y |
Funzione anonima (espressione lambda) |
Operatori logici, condizionali e null
Categoria |
Espressione |
Descrizione |
---|---|---|
AND logico |
x & y |
AND intero bit per bit, AND logico booleano |
XOR logico |
x ^ y |
XOR bit per bit integer, XOR logico booleano |
OR logico |
x | y |
OR bit per bit integer, OR logico booleano |
AND condizionale |
x && y |
Restituisce y solo se x è true |
OR condizionale |
x || y |
Restituisce y solo se x è false |
Null coalescing |
X ?? y |
Restituisce y se x è null; in caso contrario, x |
Condizionale |
x ?: y : z |
Restituisce y se x è true, z se x è false |
Quando in un'espressione sono presenti due operatori con la stessa precedenza, verranno valutati in base all'associazione. Gli operatori che prevedono l'associazione all'operando di sinistra vengono valutati nell'ordine da sinistra a destra. L'espressione x * y / z viene ad esempio valutata come (x * y) / z. Gli operatori che prevedono l'associazione all'operando di destra vengono valutati nell'ordine da destra a sinistra. Gli operatori di assegnazione e l'operatore terziario (?:) prevedono l'associazione all'operando di destra. Tutti gli altri operatori binari prevedono l'associazione all'operando di sinistra.
Per fare in modo che un'espressione venga valutata prima delle altre è possibile racchiuderla tra parentesi. Il risultato dell'espressione 2 + 3 * 2 sarebbe normalmente 8, in quanto gli operatori di moltiplicazione hanno la precedenza su quelli di addizione. Se tuttavia l'espressione viene scritta nel formato (2 + 3) * 2 il risultato sarà 10, perché si indica al compilatore C# che l'operatore di addizione (+) deve essere valutato prima di quello di moltiplicazione (*).
È possibile modificare il comportamento degli operatori per classi e strutture personalizzate. Questo processo è denominato overload degli operatori. Per ulteriori informazioni, vedere Operatori che supportano l'overload (Guida per programmatori C#).
Sezioni correlate
Per ulteriori informazioni, vedere Parole chiave per operatori (Riferimenti per C#) e Operatori di C#.
Vedere anche
Concetti
Riferimenti
Istruzioni, espressioni e operatori (Guida per programmatori C#)
Cronologia delle modifiche
Data |
Cronologia |
Motivo |
---|---|---|
Luglio 2008 |
Rimossa istruzione erronea su output non definito. |
Miglioramento delle informazioni. |