Conversioni implicite ed esplicite (Visual Basic)Implicit and Explicit Conversions (Visual Basic)

Una conversione implicita non richiede alcuna sintassi speciale nel codice sorgente.An implicit conversion does not require any special syntax in the source code. 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 .In the following example, Visual Basic implicitly converts the value of k to a single-precision floating-point value before assigning it to 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 di conversione del tipo.An explicit conversion uses a type conversion keyword. Visual Basic fornisce diverse parole chiave, che assegnano un'espressione tra parentesi al tipo di dati desiderato.Visual Basic provides several such keywords, which coerce an expression in parentheses to the desired data type. 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.These keywords act like functions, but the compiler generates the code inline, so execution is slightly faster than with a function call.

Nell'estensione seguente dell'esempio precedente, la CInt parola chiave converte il valore di di q nuovo in un intero prima di assegnarlo a k .In the following extension of the preceding example, the CInt keyword converts the value of q back to an integer before assigning it to 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 conversioneConversion Keywords

Nella tabella seguente vengono illustrate le parole chiave di conversione disponibili.The following table shows the available conversion keywords.

Parola chiave di conversione del tipoType conversion keyword Converte un'espressione in un tipo di datiConverts an expression to data type Tipi di dati consentiti di espressione da convertireAllowable data types of expression to be converted
CBool Tipo di dati BooleanBoolean Data Type Qualsiasi tipo numerico (inclusi Byte i SByte tipi enumerati, e), String ,ObjectAny numeric type (including Byte, SByte, and enumerated types), String, Object
CByte Tipo di dati ByteByte Data Type Qualsiasi tipo numerico (inclusi i SByte tipi enumerati e),, Boolean String ,ObjectAny numeric type (including SByte and enumerated types), Boolean, String, Object
CChar Tipo di dati CharChar Data Type String, ObjectString, Object
CDate Tipo di dati DateDate Data Type String, ObjectString, Object
CDbl Tipo di dati DoubleDouble Data Type Qualsiasi tipo numerico (inclusi Byte i SByte tipi enumerati, e), Boolean , String ,ObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, String, Object
CDec Tipo di dati DecimalDecimal Data Type Qualsiasi tipo numerico (inclusi Byte i SByte tipi enumerati, e), Boolean , String ,ObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, String, Object
CInt Tipo di dati IntegerInteger Data Type Qualsiasi tipo numerico (inclusi Byte i SByte tipi enumerati, e), Boolean , String ,ObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, String, Object
CLng Tipo di dati LongLong Data Type Qualsiasi tipo numerico (inclusi Byte i SByte tipi enumerati, e), Boolean , String ,ObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, String, Object
CObj Object Data TypeObject Data Type Qualsiasi tipoAny type
CSByte Tipo di dati SByteSByte Data Type Qualsiasi tipo numerico (inclusi i Byte tipi enumerati e),, Boolean String ,ObjectAny numeric type (including Byte and enumerated types), Boolean, String, Object
CShort Tipo di dati ShortShort Data Type Qualsiasi tipo numerico (inclusi Byte i SByte tipi enumerati, e), Boolean , String ,ObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, String, Object
CSng Tipo di dati SingleSingle Data Type Qualsiasi tipo numerico (inclusi Byte i SByte tipi enumerati, e), Boolean , String ,ObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, String, Object
CStr Tipo di dati StringString Data Type Qualsiasi tipo numerico (inclusi Byte i SByte tipi enumerati, e), Boolean , Char , Char matrice, Date ,ObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, Char, Char array, Date, Object
CType Tipo specificato dopo la virgola ( , )Type specified following the comma (,) Quando si esegue la conversione in un tipo di dati Elementary (inclusa una matrice di un tipo elementare), gli stessi tipi consentiti per la parola chiave di conversione corrispondenteWhen converting to an elementary data type (including an array of an elementary type), the same types as allowed for the corresponding conversion keyword

Quando si esegue la conversione in un tipo di dati composito, le interfacce implementate e le classi da cui ereditaWhen converting to a composite data type, the interfaces it implements and the classes from which it inherits

Quando si esegue la conversione in una classe o struttura in cui è stato sottoposto a overload CType , tale classe o strutturaWhen converting to a class or structure on which you have overloaded CType, that class or structure
CUInt Tipo di dati UIntegerUInteger Data Type Qualsiasi tipo numerico (inclusi Byte i SByte tipi enumerati, e), Boolean , String ,ObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, String, Object
CULng Tipo di dati ULongULong Data Type Qualsiasi tipo numerico (inclusi Byte i SByte tipi enumerati, e), Boolean , String ,ObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, String, Object
CUShort Tipo di dati UShortUShort Data Type Qualsiasi tipo numerico (inclusi Byte i SByte tipi enumerati, e), Boolean , String ,ObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, String, Object

Funzione CTypeThe CType Function

La funzione CType opera su due argomenti.The CType Function operates on two arguments. Il primo è l'espressione da convertire e la seconda è il tipo di dati di destinazione o la classe di oggetti.The first is the expression to be converted, and the second is the destination data type or object class. Si noti che il primo argomento deve essere un'espressione, non un tipo.Note that the first argument must be an expression, not a type.

CTypeè una funzione inline, ovvero il codice compilato esegue la conversione, spesso senza generare una chiamata di funzione.CType is an inline function, meaning the compiled code makes the conversion, often without generating a function call. In questo modo le prestazioni risultano migliorate.This improves performance.

Per un confronto di CType con le altre parole chiave di conversione dei tipi, vedere Operatore DirectCast e operatore TryCast.For a comparison of CType with the other type conversion keywords, see DirectCast Operator and TryCast Operator.

Tipi elementariElementary Types

L'esempio seguente illustra l'uso di CType.The following example demonstrates the use of CType.

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

Tipi compositiComposite Types

È possibile usare CType per convertire i valori in tipi di dati compositi e in tipi elementari.You can use CType to convert values to composite data types as well as to elementary types. È anche possibile usarlo per forzare una classe di oggetti nel tipo di una delle relative interfacce, come nell'esempio seguente.You can also use it to coerce an object class to the type of one of its interfaces, as in the following example.

' 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 matriceArray Types

CTypepuò anche convertire i tipi di dati della matrice, come nell'esempio seguente.CType can also convert array data types, as in the following example.

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 ulteriori informazioni e un esempio, vedere conversioni di matrici.For more information and an example, see Array Conversions.

Tipi che definiscono CTypeTypes Defining CType

È possibile definire CType in una classe o una struttura definita.You can define CType on a class or structure you have defined. In questo modo è possibile convertire i valori da e verso il tipo della classe o della struttura.This allows you to convert values to and from the type of your class or structure. Per altre informazioni e per un esempio, vedere procedura: definire un operatore di conversione.For more information and an example, see How to: Define a Conversion Operator.

Nota

I valori utilizzati con una parola chiave di conversione devono essere validi per il tipo di dati di destinazione oppure si verifica un errore.Values used with a conversion keyword must be valid for the destination data type, or an error occurs. Se, ad esempio, si tenta di convertire un oggetto Long in un oggetto Integer , il valore di Long deve essere compreso nell'intervallo valido per il Integer tipo di dati.For example, if you attempt to convert a Long to an Integer, the value of the Long must be within the valid range for the Integer data type.

Attenzione

CTypeLa specifica di per la conversione da un tipo di classe a un altro non riesce in fase di esecuzione se il tipo di origine non deriva dal tipo di destinazione.Specifying CType to convert from one class type to another fails at run time if the source type does not derive from the destination type. Tale errore genera un' InvalidCastException eccezione.Such a failure throws an InvalidCastException exception.

Tuttavia, se 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 .However, if one of the types is a structure or class you have defined, and if you have defined CType on that structure or class, a conversion can succeed if it satisfies the requirements of your CType. Vedere procedura: definire un operatore di conversione.See How to: Define a Conversion Operator.

L'esecuzione di una conversione esplicita è nota anche come cast di un'espressione a un tipo di dati o a una classe di oggetti specificati.Performing an explicit conversion is also known as casting an expression to a given data type or object class.

Vedere ancheSee also