Rozszerzanie i zwężanie konwersji (Visual Basic)
Ważnym zagadnieniem konwersji typu jest, czy wynik konwersji jest w zasięgu typ danych docelowego.
A poszerzenie konwersji zmienia wartość na typ danych, który może umożliwić wszelkie możliwe wartości oryginalne dane.Poszerzenie konwersje zachować wartość źródłowa, ale można zmienić jego reprezentacji.Dzieje się tak po konwersji z typu integralną Decimal, lub z Char do String.
A zawężanie konwersji zmienia wartość na typ danych, które mogą nie być w stanie utrzymać, niektóre z możliwych wartości.Na przykład, wartość ułamkowa jest zaokrąglana przy typ integralny i typu liczbowego, którego ma zostać przekonwertowany na Boolean jest zredukowana do albo True lub False.
Poszerzenie konwersji
W poniższej tabeli przedstawiono standardowe rozszerzenie konwersji.
Typ danych |
Rozszerza się do typów danych 1 |
SByte, Short, Integer, Long, Decimal, Single, Double |
|
Byte, Short, UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double |
|
Short, Integer, Long, Decimal, Single, Double |
|
UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double |
|
Integer, Long, Decimal, Single, Double2 |
|
UInteger, Long, ULong, Decimal, Single, Double2 |
|
Long, Decimal, Single, Double2 |
|
ULong, Decimal, Single, Double2 |
|
Decimal, Single, Double2 |
|
Single, Double |
|
Double |
|
Dowolny typ wyliczeniowy (Enum) |
Jego podstawowym typem całkowitym i dowolnego typu, do którego rozszerza podstawowy typ. |
Char, String |
|
CharTablica |
CharArray,String |
Dowolny typ |
|
Dowolnego typu pochodnego |
Oparcie dowolnego typu, z której pochodzi 3. |
Dowolny typ |
Interfejs, który implementuje. |
Typ danych lub typ obiektu. |
1 z definicji, każdy typ danych rozszerza się do samego siebie.
2 Konwersji z Integer, UInteger, Long, ULong, lub Decimal do Single lub Double może spowodować utratę precyzji, ale nigdy nie utratę wielkości.W tym sensie nie ponoszą straty informacji.
3 Może wydawać się Zaskakujące, że poszerzenie jest konwersja z typu pochodnego do jednego z jego typów podstawowych.Uzasadnienie jest typu pochodnego zawiera wszystkie elementy członkowskie typu podstawowego, więc go kwalifikuje się jako wystąpienie typu podstawowego.W przeciwnym kierunku typu podstawowego nie zawiera żadnych nowych członków definicją typu pochodnego.
Poszerzenie konwersje się zawsze powieść w czasie wykonywania i nigdy nie ponoszą utraty danych.Zawsze je wykonywać w sposób niejawny, czy Option Strict — Instrukcja ustawia typ przełącznika do sprawdzania On lub Off.
Konwersji zawężającej
Następujące standardowe konwersji zawężającej:
Odwrotne kierunkach poszerzanie konwersji w poprzednim tabela (z wyjątkiem, że każdy rodzaj rozszerza się do niej samej)
Konwersje w obu kierunkach między Boolean oraz dla każdego typu numeryczne
Typ wyliczeniowy konwersje z dowolnego typu numeryczne do dowolnego (Enum)
Konwersje w obu kierunkach między String i każdy typ liczbowy, Boolean, lub Data
Konwersja z typu danych lub obiektu typu do typu, uzyskane z niego
Konwersji zawężającej nie zawsze się powieść w czasie wykonywania i może się nie powieść lub z naliczeniem utraty danych.Błąd występuje, jeśli typ danych docelowego nie może odbierać wartość docelową konwersji.Na przykład numerycznej konwersji może spowodować przepełnienie.Kompilator nie zezwala na dokonywanie konwersji zawężającej niejawnie, chyba że Option Strict — Instrukcja ustawia typ przełącznika do sprawdzania Off.
[!UWAGA]
Błąd konwersji zawężanie jest wstrzymany dla konwersji z elementów w For Each…Next kolekcji zmienna sterująca pętli.Aby uzyskać więcej informacji i przykłady, zobacz sekcję "Zawężanie konwersje" w For Each...Next — Instrukcja (Visual Basic).
Kiedy używać zawężanie konwersji
Konwersji zawężającej jest używany, gdy wiadomo, że wartość źródła można konwertować na typ danych docelowego bez utraty danych lub błędu.Na przykład, jeśli masz String że znasz zawiera "Prawda" lub "False", można użyć CBool słowo kluczowe, aby przekonwertować go do Boolean.
Wyjątki podczas konwersji
Ponieważ zawsze poszerzenie konwersje powiodła się, generują wyjątki.Konwersji zawężającej, gdy zawodzą, najczęściej throw następujące wyjątki:
InvalidCastException— Jeżeli zdefiniowano bez konwersji między tymi dwoma typami
OverflowException— (tylko w Całka typy) Jeśli konwertowaną wartość jest za duża dla typu docelowego
Jeśli definiuje klasy lub struktury CType — Funkcja (Visual Basic) służyć jako operatora konwersji do lub z tej klasy lub struktury, która CType może zgłosić wszelkie wyjątki, które uzna za stosowne.Ponadto, że CType może wywołać Visual Basic funkcje lub .NET Framework metody, które z kolei mogłoby throw szereg wyjątków.
Zmiany podczas konwersji typu odwołania
Konwersja z Typ odwołania kopiuje tylko wskaźnik do wartości.Samą wartość nie jest kopiowana ani w żaden sposób zmieniana.Jedyną rzeczą, którą można zmienić, jest typ danych zmiennej Przytrzymanie wskaźnika myszy.W poniższym przykładzie typ danych jest konwertowana z klasy pochodne do swojej klasy bazowej, ale obiekt, który zarówno zmienne teraz wskaż pozostaje niezmieniona.
' Assume class cSquare inherits from class cShape.
Dim shape As cShape
Dim square As cSquare = New cSquare
' The following statement performs a widening
' conversion from a derived class to its base class.
shape = square
Zobacz też
Zadania
Porady: konwertowanie obiektu do innego typu w Visual Basic
Informacje
Typ danych — Podsumowanie (Visual Basic)
Funkcje konwersji typu (Visual Basic)
Koncepcje
Konwersje jawne i niejawne (Visual Basic)
Konwertowanie pomiędzy ciągami a innymi typami danych (Visual Basic)
Konwersje tablic (Visual Basic)