Udostępnij za pośrednictwem


Niejawne i jawne konwersje danych (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.

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

Zobacz także