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
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.