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