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

Guida per programmatori C#

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.