Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
.
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 do 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 słowo kluczowe CInt
konwertuje wartość q
z 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żeń do konwersji |
---|---|---|
CBool |
Typ danych logicznych | Dowolny typ liczbowy (w tym Byte , SByte i typy wyliczane), String , Object |
CByte |
Typ danych bajtów | Dowolny typ liczbowy (w tym SByte i typy wyliczane), Boolean , , String Object |
CChar |
Typ danych char |
String , Object |
CDate |
Typ danych daty |
String , Object |
CDbl |
Double, typ danych | Dowolny typ liczbowy (w tym Byte , SByte i typy wyliczane), Boolean , String , Object |
CDec |
Typ danych dziesiętnych | Dowolny typ liczbowy (w tym Byte , SByte i typy wyliczane), Boolean , String , Object |
CInt |
Typ danych liczb całkowitych | Dowolny typ liczbowy (w tym Byte , SByte i typy wyliczane), Boolean , String , Object |
CLng |
Długi typ danych | Dowolny typ liczbowy (w tym Byte , SByte i typy wyliczane), Boolean , String , Object |
CObj |
Typ danych obiektu | Dowolny typ |
CSByte |
Typ danych SByte | Dowolny typ liczbowy (w tym Byte i typy wyliczane), Boolean , , String Object |
CShort |
Krótki typ danych | Dowolny typ liczbowy (w tym Byte , SByte i typy wyliczane), Boolean , String , Object |
CSng |
Single, typ danych | Dowolny typ liczbowy (w tym Byte , SByte i typy wyliczane), Boolean , String , Object |
CStr |
Typ danych tekstowych | Dowolny typ liczbowy (w tym Byte , SByte i typy wyliczane), Boolean , Char , tablica Char , Date , Object |
CType |
Typ określony po przecince (, ) |
Podczas konwertowania na podstawowy typ danych (w tym tablicę typu podstawowego), można użyć tych samych typów, które są zgodne z odpowiednim słowem kluczowym konwersji. Podczas konwertowania na typ danych złożonych uwzględniane są interfejsy, które implementuje, oraz klasy, z których dziedziczy. Podczas konwertowania na klasę lub strukturę, dla której przeciążono operator CType , ta klasa lub struktura |
CUInt |
Typ danych UInteger | Dowolny typ liczbowy (w tym Byte , SByte i typy wyliczane), Boolean , String , Object |
CULng |
Typ danych ULong | Dowolny typ liczbowy (w tym Byte , SByte i typy wyliczane), Boolean , String , Object |
CUShort |
Typ danych UShort | Dowolny typ liczbowy (w tym Byte , SByte i typy 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 porównać CType
z innymi słowami kluczowymi konwersji typów, odwołaj się do DirectCast Operator 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ć CType
w zdefiniowanej przez siebie klasie lub strukturze. 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 / Notatka
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
na Integer
, wartość Long
musi należeć do prawidłowego zakresu dla typu danych Integer
.
Ostrzeżenie
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.