Conversioni implicite ed esplicite (Visual Basic)

Una conversione implicita non richiede alcuna sintassi speciale nel codice sorgente. Nell'esempio seguente Visual Basic converte in modo implicito il valore di k in un valore a virgola mobile e precisione singola prima di assegnarlo a q.

Dim k As Integer
Dim q As Double
' Integer widens to Double, so you can do this with Option Strict On.
k = 432
q = k

Una conversione esplicita usa una parola chiave per la conversione dei tipi. Visual Basic fornisce diverse parole chiave di questo tipo, che applicano forzatamente il tipo di dati desiderato a un'espressione tra parentesi. Queste parole chiave agiscono come funzioni, ma il compilatore genera il codice inline, quindi l'esecuzione è leggermente più veloce rispetto a una chiamata di funzione.

Nell'estensione seguente dell'esempio precedente la parola chiave CInt converte nuovamente il valore di q in un numero intero prima di assegnarlo a k.

' q had been assigned the value 432 from k.
q = Math.Sqrt(q)
k = CInt(q)
' k now has the value 21 (rounded square root of 432).

Parole chiave di conversione

La tabella seguente illustra le parole chiave di conversione disponibili.

Parola chiave di conversione dei tipi Converte un'espressione in un tipo di dati Tipi di dati di espressione consentiti da convertire
CBool Tipo di dati Boolean Qualsiasi tipo numerico (inclusi i tipi Byte, SByte e i tipi enumerati), String, Object
CByte Tipo di dati Byte Qualsiasi tipo numerico (inclusi i tipi SByte e i tipi enumerati), Boolean, String, Object
CChar Tipo di dati Char String, Object
CDate Tipo di dati Date String, Object
CDbl Tipo di dati Double Qualsiasi tipo numerico (inclusi i tipi Byte, SByte e i tipi enumerati), Boolean, String, Object
CDec Tipo di dati Decimal Qualsiasi tipo numerico (inclusi i tipi Byte, SByte e i tipi enumerati), Boolean, String, Object
CInt Tipo di dati integer Qualsiasi tipo numerico (inclusi i tipi Byte, SByte e i tipi enumerati), Boolean, String, Object
CLng Tipo di dati Long Qualsiasi tipo numerico (inclusi i tipi Byte, SByte e i tipi enumerati), Boolean, String, Object
CObj Object Data Type Qualsiasi tipo
CSByte Tipo di dati SByte Qualsiasi tipo numerico (inclusi i tipi Byte e i tipi enumerati), Boolean, String, Object
CShort Tipo di dati Short Qualsiasi tipo numerico (inclusi i tipi Byte, SByte e i tipi enumerati), Boolean, String, Object
CSng Tipo di dati Single Qualsiasi tipo numerico (inclusi i tipi Byte, SByte e i tipi enumerati), Boolean, String, Object
CStr Tipo di dati String Qualsiasi tipo numerico (inclusi i tipi Byte, SByte e i tipi enumerati), Boolean, Char, matrice Char, Date, Object
CType Tipo specificato dopo la virgola (,) Quando si esegue la conversione in un tipo di dati elementare (inclusa una matrice di un tipo elementare), gli stessi tipi consentiti per la parola chiave di conversione corrispondente

Quando si esegue la conversione in un tipo di dati composito, le interfacce che implementa e le classi da cui eredita

Quando si esegue la conversione in una classe o struttura in cui è stato eseguito l'overload di CType, tale classe o struttura
CUInt Tipo di dati UInteger Qualsiasi tipo numerico (inclusi i tipi Byte, SByte e i tipi enumerati), Boolean, String, Object
CULng Tipo di dati ULong Qualsiasi tipo numerico (inclusi i tipi Byte, SByte e i tipi enumerati), Boolean, String, Object
CUShort Tipo di dati UShort Qualsiasi tipo numerico (inclusi i tipi Byte, SByte e i tipi enumerati), Boolean, String, Object

Funzione CType

La funzione CType opera su due argomenti. Il primo è l'espressione da convertire e il secondo è il tipo di dati o la classe di oggetti di destinazione. Si noti che il primo argomento deve essere un'espressione, non un tipo.

CType è una funzione inline, ovvero il codice compilato esegue la conversione, spesso senza generare una chiamata di funzione. Ciò migliora le prestazioni.

Per un confronto di CType con le altre parole chiave per la conversione dei tipi, vedere Operatore DirectCast e Operatore TryCast.

Tipi elementari

L'esempio seguente illustra l'uso di CType.

k = CType(q, Integer)
' The following statement coerces w to the specific object class Label.
f = CType(w, Label)

Tipi compositi

È possibile usare CType per convertire i valori in tipi di dati compositi e in tipi elementari. È anche possibile usarlo per applicare forzatamente a una classe di oggetti il tipo di una delle relative interfacce, come nell'esempio seguente.

' Assume class cZone implements interface iZone.
Dim h As Object
' The first argument to CType must be an expression, not a type.
Dim cZ As cZone
' The following statement coerces a cZone object to its interface iZone.
h = CType(cZ, iZone)

Tipi di matrici

CType può anche convertire i tipi di dati della matrice, come illustrato nell'esempio seguente.

Dim v() As classV
Dim obArray() As Object
' Assume some object array has been assigned to obArray.
' Check for run-time type compatibility.
If TypeOf obArray Is classV()
    ' obArray can be converted to classV.
    v = CType(obArray, classV())
End If

Per altre informazioni e un esempio, vedere Conversioni di matrici.

Tipi che definiscono CType

È possibile definire CType in una classe o struttura definita. In questo modo è possibile convertire i valori verso e dal tipo della classe o della struttura. Per altre informazioni e un esempio, vedere Procedura: Definire un operatore di conversione.

Nota

I valori usati con una parola chiave di conversione devono essere validi per il tipo di dati di destinazione. In caso contrario, si verifica un errore. Ad esempio, se si prova a convertire Long in Integer, il valore di Long deve essere compreso nell'intervallo valido per il tipo di dati Integer.

Attenzione

Se il tipo di origine non deriva dal tipo di destinazione, specificare CType per la conversione da un tipo di classe a un altro ha esito negativo in fase di esecuzione. Un errore di questo tipo genera un'eccezione InvalidCastException.

Se tuttavia uno dei tipi è una struttura o una classe definita e se è stato definito CType su tale struttura o classe, una conversione può avere esito positivo se soddisfa i requisiti di CType. Vedere Procedura: Definire un operatore di conversione.

L'esecuzione di una conversione esplicita è nota anche come cast di un'espressione a un determinato tipo di dati o classe di oggetti.

Vedi anche