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

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 Bytetypy , SBytei wyliczane), String, Object
CByte Byte, typ danych Dowolny typ liczbowy (w tym SByte i typy wyliczane), Boolean, , StringObject
CChar Char, typ danych String, Object
CDate Date, typ danych String, Object
CDbl Double, typ danych Dowolny typ liczbowy (w tym Bytetypy , SBytei wyliczane), Boolean, , StringObject
CDec Decimal, typ danych Dowolny typ liczbowy (w tym Bytetypy , SBytei wyliczane), Boolean, , StringObject
CInt Integer, typ danych Dowolny typ liczbowy (w tym Bytetypy , SBytei wyliczane), Boolean, , StringObject
CLng Long, typ danych Dowolny typ liczbowy (w tym Bytetypy , SBytei wyliczane), Boolean, , StringObject
CObj Object, typ danych Dowolny typ
CSByte SByte, typ danych Dowolny typ liczbowy (w tym Byte i typy wyliczane), Boolean, , StringObject
CShort Short, typ danych Dowolny typ liczbowy (w tym Bytetypy , SBytei wyliczane), Boolean, , StringObject
CSng Single, typ danych Dowolny typ liczbowy (w tym Bytetypy , SBytei wyliczane), Boolean, , StringObject
CStr String, typ danych Dowolny typ liczbowy (w tym typy , SBytei wyliczane), Boolean, CharChar , tablica, Date,ByteObject
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 CTypeklasę lub strukturę
CUInt UInteger, typ danych Dowolny typ liczbowy (w tym Bytetypy , SBytei wyliczane), Boolean, , StringObject
CULng ULong, typ danych Dowolny typ liczbowy (w tym Bytetypy , SBytei wyliczane), Boolean, , StringObject
CUShort UShort, typ danych Dowolny typ liczbowy (w tym Bytetypy , SBytei wyliczane), Boolean, , StringObject

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.

CTypejest 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 Integerprawidł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.

Zobacz też