Implicitní a explicitní převody (Visual Basic)

Implicitní převod nevyžaduje ve zdrojovém kódu žádnou speciální syntaxi. V následujícím příkladu Jazyk Visual Basic implicitně převede hodnotu k na hodnotu s plovoucí desetinnou čárkou s jednoduchou přesností před jeho přiřazením .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

Explicitní převod používá klíčové slovo pro převod typu. Visual Basic poskytuje několik takových klíčových slov, která přetáčí výraz v závorkách na požadovaný datový typ. Tato klíčová slova fungují jako funkce, ale kompilátor vygeneruje vložený kód, takže provádění je o něco rychlejší než při volání funkce.

V následujícím rozšíření předchozího příkladu CInt klíčové slovo převede hodnotu q zpět na celé číslo před jeho přiřazením .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).

Klíčová slova převodu

V následující tabulce jsou uvedena dostupná klíčová slova pro převod.

Klíčové slovo převodu typů Převede výraz na datový typ. Povolit převod datových typů výrazů
CBool Datový typ Boolean Libovolný číselný typ (včetně Byte, SBytea výčtových typů), String, Object
CByte Datový typ Byte Libovolný číselný typ (včetně SByte a výčtových typů), Boolean, , StringObject
CChar Datový typ Char String, Object
CDate Datový typ Date String, Object
CDbl Datový typ Double Libovolný číselný typ (včetně Byte, SBytea výčtových typů), Boolean, , StringObject
CDec Datový typ Decimal Libovolný číselný typ (včetně Byte, SBytea výčtových typů), Boolean, , StringObject
CInt Datový typ Integer Libovolný číselný typ (včetně Byte, SBytea výčtových typů), Boolean, , StringObject
CLng Datový typ Long Libovolný číselný typ (včetně Byte, SBytea výčtových typů), Boolean, , StringObject
CObj Datový typ Object Libovolný typ
CSByte Datový typ SByte Libovolný číselný typ (včetně Byte a výčtových typů), Boolean, , StringObject
CShort Datový typ Short Libovolný číselný typ (včetně Byte, SBytea výčtových typů), Boolean, , StringObject
CSng Datový typ Single Libovolný číselný typ (včetně Byte, SBytea výčtových typů), Boolean, , StringObject
CStr Datový typ String Libovolný číselný typ (včetně Byte, a výčtových typů), Boolean, , CharChar pole, DateSByte,Object
CType Typ zadaný za čárkou (,) Při převodu na základní datový typ (včetně pole základního typu) jsou stejné typy jako povolené pro odpovídající klíčové slovo převodu.

Při převodu na složený datový typ rozhraní implementuje a třídy, ze kterých dědí

Při převodu na třídu nebo strukturu, na které jste přetížili CType, tato třída nebo struktura
CUInt Datový typ UInteger Libovolný číselný typ (včetně Byte, SBytea výčtových typů), Boolean, , StringObject
CULng Datový typ ULong Libovolný číselný typ (včetně Byte, SBytea výčtových typů), Boolean, , StringObject
CUShort Datový typ UShort Libovolný číselný typ (včetně Byte, SBytea výčtových typů), Boolean, , StringObject

Funkce CType

Funkce CType pracuje se dvěma argumenty. První je výraz, který se má převést, a druhý je cílový datový typ nebo třída objektu. Všimněte si, že první argument musí být výraz, nikoli typ.

CType je vložená funkce, což znamená, že zkompilovaný kód provádí převod, často bez generování volání funkce. To zvýší výkon.

Porovnání s jinými klíčovými slovy převodu CType typů naleznete v tématu Operátor DirectCast a TryCast – operátor.

Základní typy

Následující příklad ukazuje použití CType.

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

Složené typy

Můžete použít CType k převodu hodnot na složené datové typy i na základní typy. Můžete ho také použít k převodu třídy objektu na typ jednoho z jeho rozhraní, jako v následujícím příkladu.

' 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)

Typy polí

CType lze také převést datové typy pole, jako v následujícím příkladu.

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

Další informace a příklad naleznete v tématu Převody polí.

Typy definující typ CType

Můžete definovat CType třídu nebo strukturu, kterou jste definovali. To vám umožní převést hodnoty na a z typu třídy nebo struktury. Další informace a příklad naleznete v tématu Postupy: Definování operátoru převodu.

Poznámka:

Hodnoty použité s klíčovým slovem převodu musí být platné pro cílový datový typ nebo dojde k chybě. Pokud se například pokusíte převést hodnotu Long na hodnotu Integer, musí být hodnota Long v platném rozsahu Integer pro datový typ.

Upozornění

Určení CType převodu z jednoho typu třídy na jiný selže v době běhu, pokud zdrojový typ neodvozuje z cílového typu. Takové selhání vyvolá InvalidCastException výjimku.

Pokud je však jedním z typů struktura nebo třída, kterou jste definovali, a pokud jste definovali CType tuto strukturu nebo třídu, převod může být úspěšný, pokud splňuje požadavky vašeho CType. Viz Postupy: Definování operátoru převodu.

Provedení explicitního převodu se také označuje jako přetypování výrazu na daný datový typ nebo třídu objektu.

Viz také