Condividi tramite


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 a 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 utilizza una parola chiave per la conversione del tipo. Visual Basic fornisce diverse parole chiave di questo tipo, che convertono un'espressione tra parentesi nel tipo di dati desiderato. 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 CInt parola chiave converte di nuovo 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 consentiti di espressione da convertire
CBool Tipo di dati booleano Qualsiasi tipo numerico (inclusi Byte, SByte e i tipi enumerati), String, Object
CByte Tipo di dati Byte Qualsiasi tipo numerico (inclusi SByte e tipi enumerati), Boolean, , StringObject
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 tipo di dati dell'oggetto Qualsiasi tipo
CSByte Tipo di dati SByte Qualsiasi tipo numerico (inclusi Byte e tipi enumerati), Boolean, , StringObject
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 Byte, SByte e tipi enumerati), Boolean, Char array, 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 implementate e le classi da cui eredita

Quando si esegue la conversione in una classe o struttura su cui hai sovraccaricato CType, quella 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 la seconda è il tipo di dati o la classe oggetto 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 di conversione di tipo, vedere Operatore DirectCast e Operatore TryCast.

Tipi elementari

Nell'esempio seguente viene illustrato 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 coercere una classe al tipo di una delle sue 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 matrice

CType può anche convertire i tipi di dati della matrice, come 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 una struttura definita. In questo modo è possibile convertire i valori in e dal tipo della classe o della struttura. Per altre informazioni e un esempio, vedere Procedura: Definire un operatore di conversione.

Annotazioni

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

Attenzione

Se il tipo di origine non deriva dal tipo di destinazione, la specifica CType di 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 .

Tuttavia, se uno dei tipi è una struttura o una classe definita e, se è stata definita CType in tale struttura o classe, una conversione può avere esito positivo se soddisfa i requisiti dell'oggetto CType. Vedere Procedura: Definire un operatore di conversione.

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

Vedere anche