Condividi tramite


Overload dell'operatore

Gli overload dell'operatore consentono la combinazione e il confronto dei tipi mediante operatori quali "+", "-", "=" e "!=". Aggiungendo overload dell'operatore a un tipo si consente agli sviluppatori di utilizzare il tipo come se fosse un tipo primitivo incorporato. L'overload dell'operatore deve essere eseguito solo quando il significato dell'operazione è intuitivo per il tipo, ad esempio per supportare l'aggiunta di due istanze di un tipo che rappresenta un valore numerico. Non deve invece essere eseguito per fornire una sintassi abbreviata per operazioni non intuitive.

Nell'esempio di codice riportato di seguito viene illustrata la firma per l'operazione di aggiunta della classe DateTime.

[Visual Basic]

Public Shared Function op_Addition(ByVal d As DateTime, _
ByVal t As TimeSpan _
) As DateTime

[C#]

public static DateTime op_Addition(
DateTime d, 
TimeSpan t
);

Evitare di definire overload dell'operatore tranne per i tipi che devono funzionare come tipi (incorporati) primitivi.

Valutare l'opportunità di definire overload dell'operatore in un tipo che deve funzionare come tipo primitivo.

String, ad esempio, definisce gli operatori == e !=.

Definire overload dell'operatore in strutture che rappresentano numeri, ad esempio System.Decimal.

Gli overload dell'operatore sono utili nei casi in cui è immediatamente ovvio il risultato dell'operazione. È logico, ad esempio, avere la possibilità di sottrarre un oggetto System.DateTime da un altro oggetto System.DateTime e ottenere un oggetto System.TimeSpan. Non è invece appropriato utilizzare l'operatore di unione logica per unire due query di database, né utilizzare l'operatore shift per scrivere in un flusso.

Fornire degli overload dell'operatore solo se almeno uno degli operandi è del tipo che definisce l'overload.

Questa linea guida viene applicata dal compilatore C#.

Eseguire l'overload degli operatori in modo simmetrico.

Se ad esempio si esegue l'overload dell'operatore di uguaglianza, è opportuno eseguire anche l'overload dell'operatore di disuguaglianza. Analogamente, se si esegue l'overload dell'operatore di minoranza, è opportuno eseguire anche l'overload dell'operatore di maggioranza.

Si consiglia di fornire metodi con nomi descrittivi che corrispondano a ciascuno degli operatori sottoposti a overload.

È necessario seguire questa linea guida per la compatibilità con CLS. Nella tabella riportata di seguito sono elencati i simboli degli operatori e i nomi dei metodi alternativi e degli operatori corrispondenti.

Simbolo dell'operatore C#

Nome del metodo alternativo

Nome dell'operatore

Non definito

ToXxx o FromXxx

op_Implicit

Non definito

ToXxx o FromXxx

op_Explicit

+ (binario)

Add

op_Addition

- (binario)

Subtract

op_Subtraction

* (binario)

Moltiplica

op_Multiply

/

Divide

op_Division

%

Mod

op_Modulus

^

Xor

op_ExclusiveOr

& (binario)

BitwiseAnd

op_BitwiseAnd

|

BitwiseOr

op_BitwiseOr

&&

And

op_LogicalAnd

||

Oppure

op_LogicalOr

=

Assign

op_Assign

<<

LeftShift

op_LeftShift

>>

RightShift

op_RightShift

Non definito

LeftShift

op_SignedRightShift

Non definito

RightShift

op_UnsignedRightShift

==

Equals

op_Equality

>

CompareTo

op_GreaterThan

<

CompareTo

op_LessThan

!=

Equals

op_Inequality

>=

CompareTo

op_GreaterThanOrEqual

<=

CompareTo

op_LessThanOrEqual

*=

Moltiplica

op_MultiplicationAssignment

-=

Subtract

op_SubtractionAssignment

^=

Xor

op_ExclusiveOrAssignment

<<=

LeftShift

op_LeftShiftAssignment

%=

Mod

op_ModulusAssignment

+=

Add

op_AdditionAssignment

&=

BitwiseAnd

op_BitwiseAndAssignment

|=

BitwiseOr

op_BitwiseOrAssignment

,

Virgola

op_Comma

/=

Divide

op_DivisionAssignment

--

Decrement

op_Decrement

++

Increment

op_Increment

- (unario)

Negate

op_UnaryNegation

+ (unario)

Plus

op_UnaryPlus

~

OnesComplement

op_OnesComplement

Portions Copyright 2005 Microsoft Corporation. Tutti i diritti riservati.

Portions Copyright Addison-Wesley Corporation. Tutti i diritti riservati.

Per ulteriori informazioni sulle linee guida di progettazione, vedere “le linee guida di progettazione di Framework: Idiomi convenzioni, e modelli per libro raccolte riutilizzabili .NET„ di Krzysztof Cwalina e brad Abrams, emessi da Addison-Wesley, 2005.

Vedere anche

Altre risorse

Linee guida di progettazione dei membri

Linee guida di progettazione per lo sviluppo di librerie di classi