Megosztás a következőn keresztül:


Implicit és explicit konverziók (Visual Basic)

Az implicit átalakításhoz nincs szükség speciális szintaxisra a forráskódban. Az alábbi példában a Visual Basic implicit módon konvertálja k a függvény értékét egy pontosságú lebegőpontos értékké, mielőtt hozzá rendeli.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

A explicit konverzió típuskonvertálási kulcsszót használ. A Visual Basic számos ilyen kulcsszót biztosít, amelyek zárójelben kényszerítik a kifejezést a kívánt adattípusra. Ezek a kulcsszavak függvényekhez hasonlóan működnek, de a fordító a kódot beágyazottan hozza létre, így a végrehajtás valamivel gyorsabb, mint egy függvényhívás esetén.

Az előző példa következő bővítményében a CInt kulcsszó visszaalakít q egy egész számra, mielőtt hozzá rendeli.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).

Konverziós kulcsszavak

Az alábbi táblázat az elérhető konverziós kulcsszavakat mutatja be.

Típuskonvertálási kulcsszó Kifejezés adattípussá alakítása A konvertálható kifejezés adattípusai
CBool Logikai adattípus Bármilyen numerikus típus (beleértve Bytea , SByteés a számbavételi típusokat is), String, Object
CByte Bájt adattípus Bármilyen numerikus típus (beleértve SByte és számba adva), Boolean, , StringObject
CChar Karakter adattípusa String, Object
CDate Dátum adattípusa String, Object
CDbl Dupla adattípus Bármely numerikus típus (beleértve Bytea , SByteés a számbavételi típusokat), Boolean, , StringObject
CDec Decimális adattípus Bármely numerikus típus (beleértve Bytea , SByteés a számbavételi típusokat), Boolean, , StringObject
CInt Egész szám adattípusa Bármely numerikus típus (beleértve Bytea , SByteés a számbavételi típusokat), Boolean, , StringObject
CLng Hosszú adattípus Bármely numerikus típus (beleértve Bytea , SByteés a számbavételi típusokat), Boolean, , StringObject
CObj Objektum adattípusa Bármilyen típus
CSByte SByte adattípus Bármilyen numerikus típus (beleértve Byte és számba adva), Boolean, , StringObject
CShort Rövid adattípus Bármely numerikus típus (beleértve Bytea , SByteés a számbavételi típusokat), Boolean, , StringObject
CSng Egyetlen adattípus Bármely numerikus típus (beleértve Bytea , SByteés a számbavételi típusokat), Boolean, , StringObject
CStr Sztring adattípusa Bármilyen numerikus típus (beleértve Bytea , SByte, és számbavételi típusokat), Boolean, Chartömb Char , Date, Object
CType A vessző (,) után megadott típus Elemi adattípussá (beleértve egy elemi típusú tömböt) való konvertáláskor ugyanazok a típusok, mint a megfelelő konverziós kulcsszó esetében megengedettek

Összetett adattípusra való konvertáláskor az általa implementálandó interfészek és azok az osztályok, amelyektől örököl

Amikor olyan osztályra vagy struktúrára vált, amelyen túlterhelt CType, az adott osztály vagy struktúra
CUInt UInteger adattípus Bármely numerikus típus (beleértve Bytea , SByteés a számbavételi típusokat), Boolean, , StringObject
CULng ULong-adattípus Bármely numerikus típus (beleértve Bytea , SByteés a számbavételi típusokat), Boolean, , StringObject
CUShort UShort-adattípus Bármely numerikus típus (beleértve Bytea , SByteés a számbavételi típusokat), Boolean, , StringObject

A CType függvény

A CType függvény két argumentumon működik. Az első a konvertálandó kifejezés, a második pedig a cél adattípus vagy objektumosztály. Vegye figyelembe, hogy az első argumentumnak kifejezésnek kell lennie, nem típusnak.

CType egy beágyazott függvény, ami azt jelenti, hogy a lefordított kód teszi az átalakítást, gyakran függvényhívás létrehozása nélkül. Ez javítja a teljesítményt.

A többi típuskonvertálási kulcsszavak összehasonlítását CType lásd : DirectCast Operátor és TryCast Operátor.

Elemi típusok

Az alábbi példa bemutatja a .CType

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

Összetett típusok

Az értékeket összetett adattípusokká és elemi típusokká alakíthatja CType . Azt is használhatja, hogy egy objektumosztályt az egyik interfész típusára kényszerítsen, ahogyan az alábbi példában is látható.

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

Tömbtípusok

CType tömb adattípusokat is konvertálhat, ahogyan az alábbi példában is látható.

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

További információ és példa: Tömbkonvertálások.

CType-et meghatározó típusok

Definiálhat CType egy definiált osztályt vagy struktúrát. Ez lehetővé teszi az értékek átalakítását az osztály vagy a struktúra típusára és típusából. További információkért és egy példaért tekintse meg a Konverziós operátor definiálása című témakört.

Feljegyzés

A konverziós kulcsszóval használt értékeknek érvényesnek kell lenniük a céladattípusra, vagy hiba történik. Ha például egy adattípust próbál átalakítani LongInteger, az Long értéknek az adattípus érvényes tartományán Integer belül kell lennie.

Figyelemfelhívás

CType Ha a forrástípus nem a céltípusból származik, az egyik osztálytípusból a másikba való konvertálás futáskor meghiúsul. Egy ilyen hiba kivételt InvalidCastException eredményez.

Ha azonban az egyik típus egy ön által definiált struktúra vagy osztály, és ha az adott struktúrát vagy osztályt definiálta CType , az átalakítás akkor lehet sikeres, ha megfelel a CTypesaját követelményeinek. Lásd : Konverziós operátor definiálása.

Explicit átalakítást úgy is ismerünk, hogy kifejezéseket ad egy adott adattípusra vagy objektumosztályra.

Lásd még