Conversione esplicita

La conversione esplicita viene utilizzata da alcuni compilatori per supportare le conversioni di restrizione. Si tratta di una modalità di conversione specifica del linguaggio. In alcuni linguaggi come C# e C++ la conversione esplicita viene eseguita mediante operazioni di casting. Il casting si verifica quando viene aggiunto un prefisso con un tipo di dati che definisce il tipo di conversione che si desidera eseguire. In Visual Basic viene utilizzata la funzione CType per eseguire conversioni esplicite di tipi di dati che non possono essere convertiti in modo implicito. Mentre la maggior parte dei linguaggi che si avvalgono di Common Language Runtime supporta le conversioni esplicite, il meccanismo con cui queste conversioni vengono eseguite cambia di linguaggio in linguaggio. Per alcuni linguaggi destinati al Common Language Runtime può essere necessario eseguire in modo esplicito una specifica conversione, mentre per altri lo stesso tipo di conversione può essere eseguito implicitamente. Per ulteriori informazioni sulla conversione esplicita, consultare la documentazione relativa al linguaggio utilizzato.

È possibile eseguire le conversioni esplicite in modalità controllata o non controllata. Quando si esegue una conversione in modalità controllata, viene generata l'eccezione OverflowException se il valore massimo del tipo di destinazione è minore del valore del tipo da convertire. Se si esegue una conversione in modalità non controllata nelle stesse condizioni, è probabile che l'eccezione non venga generata, ma il comportamento della conversione risulterà non definito.

In C# e in alcuni altri linguaggi, è possibile eseguire un cast in modalità non controllata. In questo caso, è possibile che il valore risultante non sia valido e che non venga generata alcuna eccezione OverflowException. Il comportamento di questo tipo di conversione risulta non definito e inaffidabile. Nell'esempio di codice seguente viene illustrata un cast C# in modalità non controllata.

// The integer value is set to 2147483647.
int MyInt = int.MaxValue;
byte MyByte = (byte)Myint;
// The value of MyByte is 255, the maximum value of a Byte.
// No overflow exception is thrown.

Nell'esempio riportato di seguito viene illustrata una conversione esplicita mediante la funzione CType controllata in Visual Basic e il casting controllato in C#. In questo esempio il valore Double corrispondente a 123456789 viene convertito in un valore integer.

Dim MyDouble As Double = 123456789
Dim MyInt As Integer = CType(MyDouble, Integer)
' The value MyInt has the value 123456789. 
double MyDouble = 123456789;
int MyInt = checked ((int)MyDouble);
// The value MyInt has the value 123456789.

Si noti che una conversione esplicita può restituire risultati diversi per linguaggi diversi. Per informazioni sul comportamento delle conversioni esplicite, consultare la documentazione relativa al linguaggio utilizzato. Quando, ad esempio, si converte un valore Double in un valore Int32 in Visual Basic mediante la funzione CType, viene eseguito un arrotondamento. Se si esegue lo stesso tipo di conversione in modo esplicito in C#, vengono perduti i valori a destra del separatore decimale. Nell'esempio seguente viene eseguita una conversione esplicita da un valore Double a un valore integer.

Dim MyDouble As Double = 42.72
Dim MyInt As Integer = CType(MyDouble, Integer)
' MyInt has the value of 43.
Double MyDouble = 42.72;
int MyInt = checked ((int)MyDouble);
// MyInt has the value of 42.

Vedere anche

Riferimenti

System.Convert

Altre risorse

Conversione di tipi