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 Byte a , 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 , , String Object |
CChar |
Karakter adattípusa | String , Object |
CDate |
Dátum adattípusa | String , Object |
CDbl |
Dupla adattípus | Bármely numerikus típus (beleértve Byte a , SByte és a számbavételi típusokat), Boolean , , String Object |
CDec |
Decimális adattípus | Bármely numerikus típus (beleértve Byte a , SByte és a számbavételi típusokat), Boolean , , String Object |
CInt |
Egész szám adattípusa | Bármely numerikus típus (beleértve Byte a , SByte és a számbavételi típusokat), Boolean , , String Object |
CLng |
Hosszú adattípus | Bármely numerikus típus (beleértve Byte a , SByte és a számbavételi típusokat), Boolean , , String Object |
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 , , String Object |
CShort |
Rövid adattípus | Bármely numerikus típus (beleértve Byte a , SByte és a számbavételi típusokat), Boolean , , String Object |
CSng |
Egyetlen adattípus | Bármely numerikus típus (beleértve Byte a , SByte és a számbavételi típusokat), Boolean , , String Object |
CStr |
Sztring adattípusa | Bármilyen numerikus típus (beleértve Byte a , SByte , és számbavételi típusokat), Boolean , Char tö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 Byte a , SByte és a számbavételi típusokat), Boolean , , String Object |
CULng |
ULong-adattípus | Bármely numerikus típus (beleértve Byte a , SByte és a számbavételi típusokat), Boolean , , String Object |
CUShort |
UShort-adattípus | Bármely numerikus típus (beleértve Byte a , SByte és a számbavételi típusokat), Boolean , , String Object |
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 Long
Integer
, 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 CType
sajá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
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: