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 |
---|---|
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. |
|
=, ., ?:, ??, - >, =>, f (x), come, selezionato, non selezionato, impostazione predefinita, delegato, viene, nuovo, 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#)