Konwersje jawne i niejawne (Visual Basic)
Niejawna konwersja nie wymaga żadnej specjalnej składni w kodzie źródłowym. W poniższym przykładzie program Visual Basic niejawnie konwertuje wartość k
na wartość zmiennoprzecinkową o pojedynczej precyzji przed przypisaniem jej do q
elementu .
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
Jawna konwersja używa słowa kluczowego konwersji typu. Język Visual Basic udostępnia kilka takich słów kluczowych, które przekształcają wyrażenie w nawiasach do żądanego typu danych. Te słowa kluczowe działają jak funkcje, ale kompilator generuje wbudowany kod, więc wykonywanie jest nieco szybsze niż w przypadku wywołania funkcji.
W poniższym rozszerzeniu poprzedniego przykładu CInt
słowo kluczowe konwertuje wartość z q
powrotem na liczbę całkowitą przed przypisaniem jej do 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).
Słowa kluczowe konwersji
W poniższej tabeli przedstawiono dostępne słowa kluczowe konwersji.
Słowo kluczowe konwersji typów | Konwertuje wyrażenie na typ danych | Dozwolone typy danych wyrażenia do konwersji |
---|---|---|
CBool |
Boolean, typ danych | Dowolny typ liczbowy (w tym Byte typy , SByte i wyliczane), String , Object |
CByte |
Byte, typ danych | Dowolny typ liczbowy (w tym SByte i typy wyliczane), Boolean , , String Object |
CChar |
Char, typ danych | String , Object |
CDate |
Date, typ danych | String , Object |
CDbl |
Double, typ danych | Dowolny typ liczbowy (w tym Byte typy , SByte i wyliczane), Boolean , , String Object |
CDec |
Decimal, typ danych | Dowolny typ liczbowy (w tym Byte typy , SByte i wyliczane), Boolean , , String Object |
CInt |
Integer, typ danych | Dowolny typ liczbowy (w tym Byte typy , SByte i wyliczane), Boolean , , String Object |
CLng |
Long, typ danych | Dowolny typ liczbowy (w tym Byte typy , SByte i wyliczane), Boolean , , String Object |
CObj |
Object, typ danych | Dowolny typ |
CSByte |
SByte, typ danych | Dowolny typ liczbowy (w tym Byte i typy wyliczane), Boolean , , String Object |
CShort |
Short, typ danych | Dowolny typ liczbowy (w tym Byte typy , SByte i wyliczane), Boolean , , String Object |
CSng |
Single, typ danych | Dowolny typ liczbowy (w tym Byte typy , SByte i wyliczane), Boolean , , String Object |
CStr |
String, typ danych | Dowolny typ liczbowy (w tym typy , SByte i wyliczane), Boolean , Char Char , tablica, Date ,Byte Object |
CType |
Typ określony po przecince (, ) |
Podczas konwertowania na podstawowy typ danych (w tym tablicę typu podstawowego), te same typy, które są dozwolone dla odpowiedniego słowa kluczowego konwersji Podczas konwertowania na typ danych złożonych interfejsy implementuje i klasy, z których dziedziczy Podczas konwertowania na klasę lub strukturę, na której przeciążono CType klasę lub strukturę |
CUInt |
UInteger, typ danych | Dowolny typ liczbowy (w tym Byte typy , SByte i wyliczane), Boolean , , String Object |
CULng |
ULong, typ danych | Dowolny typ liczbowy (w tym Byte typy , SByte i wyliczane), Boolean , , String Object |
CUShort |
UShort, typ danych | Dowolny typ liczbowy (w tym Byte typy , SByte i wyliczane), Boolean , , String Object |
Funkcja CType
Funkcja CType działa na dwóch argumentach. Pierwszy to wyrażenie, które ma zostać przekonwertowane, a drugi to docelowy typ danych lub klasa obiektu. Należy pamiętać, że pierwszy argument musi być wyrażeniem, a nie typem.
CType
jest funkcją śródliniową, co oznacza, że skompilowany kod wykonuje konwersję, często bez generowania wywołania funkcji. Poprawia to wydajność.
Aby zapoznać się z CType
porównaniem z innymi słowami kluczowymi konwersji typów, zobacz Operator directcast i TryCast Operator.
Typy podstawowe
W poniższym przykładzie pokazano użycie metody CType
.
k = CType(q, Integer)
' The following statement coerces w to the specific object class Label.
f = CType(w, Label)
Typy złożone
Możesz użyć CType
polecenia , aby przekonwertować wartości na złożone typy danych, a także na typy podstawowe. Można go również użyć, aby wymusić klasę obiektów na typ jednego z jego interfejsów, jak w poniższym przykładzie.
' 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 tablic
CType
może również konwertować typy danych tablicy, jak w poniższym przykładzie.
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
Aby uzyskać więcej informacji i przykład, zobacz Konwersje tablic.
Typy definiujące typ CType
Możesz zdefiniować zdefiniowaną CType
klasę lub strukturę. Dzięki temu można konwertować wartości na i z typu klasy lub struktury. Aby uzyskać więcej informacji i przykład, zobacz How to: Define a Conversion Operator (Instrukcje: Definiowanie operatora konwersji).
Uwaga
Wartości używane ze słowem kluczowym konwersji muszą być prawidłowe dla docelowego typu danych lub występuje błąd. Jeśli na przykład próbujesz przekonwertować Long
element na , wartość Long
elementu musi należeć do Integer
prawidłowego Integer
zakresu dla typu danych.
Uwaga
Określenie konwersji CType
z jednego typu klasy na inny kończy się niepowodzeniem w czasie wykonywania, jeśli typ źródłowy nie pochodzi z typu docelowego. Taki błąd zgłasza InvalidCastException wyjątek.
Jeśli jednak jeden z typów jest zdefiniowaną strukturą lub klasą, a jeśli zdefiniowano CType
tę strukturę lub klasę, konwersja może zakończyć się powodzeniem, jeśli spełnia wymagania klasy CType
. Zobacz Instrukcje: definiowanie operatora konwersji.
Wykonywanie jawnej konwersji jest również nazywane rzutowanie wyrażenia do danego typu danych lub klasy obiektu.