Ampliação e restrição de conversões (Visual Basic)

Uma importante consideração sobre conversão de tipos é se o resultado da conversão está dentro do intervalo de tipo de dados de destino.

A widening conversão altera um valor para um tipo de dados que pode permitir a qualquer valor possível dos dados originais.Conversões de alargamento preservam o valor-fonte, mas podem alterar sua representação.Isso ocorre se você converter do tipo integral para Decimal, ou a partir de Char para String.

Uma conversão redutora muda o valor para um tipo de dados que pode não ser capaz de manter precisamente algum dos possíveis valores.Por exemplo, um valor fracionário será arredondado quando ele é convertido em tipo integral e um tipo numérico, que está sendo convertido em Boolean é reduzido a um True ou False.

Conversões Ampliadoras

A tabela a seguir mostra as conversões ampliadoras padrão.

Tipo de dados

Amplia a tipos de dados 1

SByte

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

Byte

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

Short

Short, Integer, Long, Decimal, Single, Double

UShort

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

Integer

Integer, Long, Decimal, Single, Double2

UInteger

UInteger, Long, ULong, Decimal, Single, Double2

Long

Long, Decimal, Single, Double2

ULong

ULong, Decimal, Single, Double2

Decimal

Decimal, Single, Double2

Simples

Single, Double

Double

Double

Qualquer tipo enumerado (Enum)

Seu tipo subjacente de integral e qualquer tipo ao qual o tipo subjacente amplia.

Char

Char, String

Matriz Char

Chararray,String

Qualquer tipo

Object

Qualquer tipo derivado

Quaisquer base do qual ele é derivado do tipo 3.

Qualquer tipo

Qualquer interface que ela implementa.

Nada

Qualquer tipo de dados ou o tipo de objeto.

1 Por definição, cada tipo de dados amplia a si mesmo.

2 Conversões de Integer,UInteger,Long,ULong, ou Decimal para Single ou Double pode resultar na perda de precisão, mas nunca na perda de magnitude.Nesse sentido, elas não provocam perda de informações.

3 Pode parecer estranho que uma conversão de um tipo derivado em um dos seus tipos base é ampliadora.A justificativa é que o tipo derivado contém todos os membros do tipo base, portanto, ele qualifica como uma instância do tipo base.Na direção oposta, o tipo base não contém quaisquer novos membros definidos pelo tipo derivado.

Conversões de ampliação sempre são bem-sucedidas no tempo de execução e nunca provocam perda de dados.Você pode sempre executá-las implicitamente, se o Opção Strict Statement selecionar a opção de tipo para On ou para Off.

Conversões Redutoras

As conversões redutoras padrão incluem o seguinte:

  • As direções inversas das conversões ampliadoras na anterior tabela (exceto pelo fato de que cada tipo amplia a si mesmo)

  • Conversões em ambas as direções entre Boolean e qualquer tipo numérico

  • Conversões de qualquer tipo numérico para qualquer tipo enumerado (Enum)

  • Conversões em ambas as direções entre String e qualquer tipo numérico, Boolean, ou Data

  • Conversões de uma tipo de dados ou tipo de objeto para um tipo derivado dele

Conversões de restrição não são sempre bem-sucedidas em tempo de execução e podem falhar ou provoca perda de dados.Um erro ocorrerá se o tipo de dados de destino não puder receber o valor que está sendo convertido.Por exemplo, uma conversão numérica pode resultar em um estouro.O compilador não permite que você execute conversões redutoras implicitamente, a menos que o Opção Strict Statement defina o verificador de tipo para Off.

ObservaçãoObservação

O erro de conversão narrowing é suprimido para conversões de elementos em um For Each…Next coleção para a variável de controle de loop.Para obter mais informações e exemplos, consulte a seção "Estreitando conversões" Para cada...Próxima instrução (Visual Basic).

k1e94s7e.collapse_all(pt-br,VS.110).gifQuando usar conversão de restrição

Use uma conversão de restrição quando você souber que o valor de origem pode ser convertido em tipo de dados de destino sem erro ou perda de dados.Por exemplo, se você tiver um String que você saiba que contém "True" ou "False", você pode usar o CBool palavra-chave para convertê-lo para Boolean.

Exceções durante conversão

Como conversões ampliadoras sempre são bem-sucedida, elas não lançam exceções.Conversões de restrição, quando elas falham, mais comumente lançam as seguintes exceções:

  • InvalidCastException — se nenhuma conversão for definida entre os dois tipos

  • OverflowException — (tipos integral somente) se o valor convertido é muito grande para o tipo de destino

Se uma classe ou estrutura define um Função CType (Visual Basic) para servir como um operador de conversão entre classe ou estrutura, esta CType pode acionar qualquer exceção que achar apropriada.Além disso, esta CType pode chamar funções Visual Basic ou métodos .NET Framework, que, por sua vez, podem acionar uma variedade de exceções.

Alterações Durante Conversões de Tipo de Referência

Uma conversão de um tipo de referência copia apenas o ponteiro ao valor.O próprio valor não é nem copiado nem alterado de nenhum modo.A única coisa que pode mudar é o tipo de dados da variável mantendo o ponteiro.No exemplo a seguir, o tipo de dados é convertido da classe derivada para sua classe base, mas o objeto ao qual ambas a variáveis apontam está inalterado.

' 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

Consulte também

Tarefas

Como: converter um objeto em outro tipo de Visual Basic

Referência

Resumo do tipo de dados (Visual Basic)

Funções de conversão de tipo (Visual Basic)

Conceitos

Tipos de dados em Visual Basic

Conversões implícitas e explícitas (Visual Basic)

Conversões entre cadeias de caracteres e outros tipos (Visual Basic)

Conversões de matriz (Visual Basic)

Outros recursos

Conversões de tipo em Visual Basic