Conversões Ampliadoras e Redutoras
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.Uma conversão ampliadora altera um valor para um tipo de dados que pode acomodar qualquer possível valor dos dados originais.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.
Conversões Ampliadoras
A tabela a seguir mostra as conversões ampliadoras padrão.
Tipo de dados |
Amplia a tipos de dados 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 |
|
Qualquer tipo enumerado (Enum) |
Seu tipo integral subjacente e qualquer tipo ao qual o tipo subjacente amplia |
Char, String |
|
Matriz Char |
Char matriz, String |
Qualquer tipo |
|
Qualquer tipo derivado |
Qualquer tipo base a partir da qual ele é derivado 3 |
Qualquer tipo |
Qualquer interface que ele implementa |
Quaisquer tipo de dados ou 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 declaração estrito 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 declaração estrito defina o verificador de tipo para Off.
Observação: |
---|
A conversão de restrição erro é suprimido para conversões de o 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"For each... Next demonstrativo (Visual Basic). |
Quando 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 uma String que você saiba que contém "Verdadeiro" ou "Falso", você pode usar a palavra-chave CBool para convertê-la em 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 CType Function 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.
Consulte também
Tarefas
Como: Converter um objeto em outro tipo no Visual Basic
Conceitos
Tipos de dados no Visual Basic
Conversões explícita e implícita
Alterações de Valor Durante Conversões
Conversões entre sequências e outros tipos
Programação Sem-Tipos no Visual Basic
Referência
Resumo de tipo de dados (Visual Basic)
Outros recursos
Conversões de Tipo no Visual Basic
Date |
History |
Motivo |
---|---|---|
Julho de 2008 |
Adicionar uma observação sobre como restringir as conversões e For Each…Next. |
Comentários do cliente. |