Udostępnij za pośrednictwem


Rozszerzanie i zawęż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

SByte, Short, Integer, Long, Decimal, Single, Double

Bajt

Byte, Short, UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

Krótkie

Short, Integer, Long, Decimal, Single, Double

UShort

UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

Liczba całkowita

Integer, Long, Decimal, Single, Double2

UInteger

UInteger, Long, ULong, Decimal, Single, Double2

Długie

Long, Decimal, Single, Double2

ULong

ULong, Decimal, Single, Double2

Dziesiętny

Decimal, Single, Double2

Pojedynczy

Single, Double

Podwójne

Double

Dowolny typ wyliczeniowy (Enum)

Jego podstawowym typem całkowitym i dowolnego typu, do którego rozszerza podstawowy typ.

CHAR

Char, String

CharTablica

CharArray,String

Dowolny typ

Obiekt

Dowolnego typu pochodnego

Oparcie dowolnego typu, z której pochodzi 3.

Dowolny typ

Interfejs, który implementuje.

Nic

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 Opcja ścisłego instrukcji 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 Opcja ścisłego instrukcji 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 Dla każdego...Następna instrukcja (Visual Basic).

k1e94s7e.collapse_all(pl-pl,VS.110).gifKiedy 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 Funkcja CType (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

Jak: konwertowanie obiektu na inny typ w języku Visual Basic

Informacje

Podsumowanie typów danych (Visual Basic)

Funkcje konwersji typu (Visual Basic)

Koncepcje

Typy danych języka Visual Basic

Konwersje niejawne i jawne (Visual Basic)

Konwersje między ciągi i innych typów (Visual Basic)

Tablica konwersji (Visual Basic)

Inne zasoby

Konwersje typów w języku Visual Basic