Operatori che supportano l'overload (Guida per programmatori C#)

C# consente ai tipi definiti dall'utente di eseguire l'overload di alcuni operatori definendo le funzioni membro statiche tramite la parola chiave operator. Non è tuttavia possibile sottoporre a overload tutti gli operatori e per alcuni esistono delle restrizioni, come indicato nella tabella seguente.

Operatori

Possibilità di overload

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

Questi operatori unari possono essere sottoposti a overload.

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

Questi operatori binari possono essere sottoposti a overload.

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

Gli operatori di confronto possono essere sottoposti a overload (vedere tuttavia la nota riportata dopo la tabella).

&&, ||

Gli operatori logici condizionali non possono essere sottoposti a overload, ma vengono valutati tramite & e |, che è possibile sottoporre a overload.

[]

L'operatore di indicizzazione delle matrici non può essere sottoposto a overload, anche se è possibile definire gli indicizzatori.

()

L'operatore cast non può essere sottoposto a overload ma è possibile definire nuovi operatori di conversione (vedere explicit e implicit).

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

Gli operatori di assegnazione non possono essere sottoposti a overload. Tuttavia, +=, ad esempio, viene valutato tramite +, che è possibile sottoporre a overload.

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

Questi operatori non possono essere sottoposti a overload.

Nota

L'overload degli operatori di confronto deve essere eseguito su coppie di operatori. Se ad esempio si esegue l'overload di ==, sarà necessario eseguirlo anche di !=. È valida anche l'operazione invece, simile anche per < e >, nonché per <= e >=.

Per eseguire l'overload di un operatore in una classe personalizzata, è necessario creare un metodo nella classe con la firma corretta. Il metodo deve essere denominato "operator X", dove X è il nome o il simbolo dell'operatore da sottoporre a overload. Gli operatori unari dispongono di un unico parametro, mentre quelli binari ne prevedono due. In ogni caso, un parametro deve essere dello stesso tipo della classe o della struttura che dichiara l'operatore, come illustrato nell'esempio seguente:

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

Per ulteriori informazioni, vedere Procedura: utilizzare l'overload degli operatori per creare una classe di numeri complessi (Guida per programmatori C#).

Vedere anche

Riferimenti

Istruzioni, espressioni e operatori (Guida per programmatori C#)

Operatori (Guida per programmatori C#)

Operatori [C#]

Concetti

Guida per programmatori C#

Altre risorse

Perché gli operatori di overload sono sempre statici in C#?