Conversões explícita e implícita
Uma conversão implícita não requer qualquer síntaxe especial no código fonte.No exemplo a seguir, Visual Basic implicitamente converte o valor de k em um valor de ponto flutuante antes designá-lo a q.
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
Uma conversão explícita usa uma palavra-chave para a conversão de tipos.Visual Basic Fornece palavras-vários tal chave, que forçar uma expressão entre parênteses para o tipo de dados desejado. Essas palavras-chave atuam como funções, mas o compilador gera o código embutido, portanto execução é ligeiramente mais rápido do que com um chamada de função.
Na seguinte extensão do exemplo anterior, a palavra-chave CInt converte o valor de q novamente como um número inteiro antes de atribuí-lo para 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).
Palavras-chave conversão
A tabela a seguir mostra as palavras-chave conversão disponível.
Palavra-chave conversão tipo |
Converte uma expressão em tipo de dados |
Tipos de dados permitido de expressão a ser convertido |
---|---|---|
CBool |
Qualquer tipo numérico (incluindo Byte, SByte e os tipos enumerados), String, Object |
|
CByte |
Qualquer tipo numérico (incluindo SByte, Boolean e os tipos enumerados), String, Object |
|
CChar |
String, Object |
|
CDate |
String, Object |
|
CDbl |
Qualquer tipo numérico (incluindo Byte, SByte e os tipos enumerados), Boolean, String,Object |
|
CDec |
Qualquer tipo numérico (incluindo Byte, SByte e os tipos enumerados), Boolean, String,Object |
|
CInt |
Qualquer tipo numérico (incluindo Byte, SByte e os tipos enumerados), Boolean, String,Object |
|
CLng |
Qualquer tipo numérico (incluindo Byte, SByte e os tipos enumerados), Boolean, String,Object |
|
CObj |
Qualquer tipo |
|
CSByte |
Qualquer tipo numérico (incluindo Byte, Boolean e os tipos enumerados), String, Object |
|
CShort |
Qualquer tipo numérico (incluindo Byte, SByte e os tipos enumerados), Boolean, String,Object |
|
CSng |
Qualquer tipo numérico (incluindo Byte, SByte e os tipos enumerados), Boolean, String,Object |
|
CStr |
Qualquer tipo numérico (incluindo Byte, SByte e os tipos enumerados), Boolean, Char,matriz Char,Date,Object |
|
CType |
Tipo especificado após a vírgula (,) |
Ao converter para um Tipo de dados elementar (incluindo uma matriz de um tipo elementar) os mesmos tipos como permitido para a palavra-chave conversão correspondente Ao converter em interfaces um tipo de dados composto, o ele implementa e as classes do qual ele herda Ao converter a uma classe ou estrutura na qual você tenha sobrecarregado CType, que classe ou estrutura |
CUInt |
Qualquer tipo numérico (incluindo Byte, SByte e os tipos enumerados), Boolean, String,Object |
|
CULng |
Qualquer tipo numérico (incluindo Byte, SByte e os tipos enumerados), Boolean, String,Object |
|
CUShort |
Qualquer tipo numérico (incluindo Byte, SByte e os tipos enumerados), Boolean, String,Object |
A função CType
O CType Function opera em dois argumentos.A primeira é a expressão a ser convertido, e o segundo é a classe tipo ou objeto de dados de destino.Observe que o primeiro argumento deve ser uma expressão, não um tipo.
CType é uma função in-line, que significa que o código compilado faz a conversão, com frequência sem gerar um chamada de função.Isso melhora o desempenho.
Para uma comparação de CType com as outras conversão de tipos palavras-chave, consulte DirectCast e TryCast.
Tipos elementar
O exemplo a seguir demonstra o uso de CType.
k = CType(q, Integer)
' The following statement coerces w to the specific object class Label.
f = CType(w, Label)
Tipos Composite
Você pode usar CType para converter valores em tipos de dados compostos bem como para tipos elementares.Também pode usá-lo para forçar uma classe de objeto para o tipo de uma das suas interfaces, como no exemplo a seguir.
' 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)
Tipos de matriz
CType também pode converter tipos de dados de matriz, como no exemplo a seguir.
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
Para mais informações e um exemplo, consulte Conversões de array.
Tipos definindo CType
Você pode definir CType em uma classe ou estrutura que você definiu.Isso permite que você para converter valores de e para o tipo de sua classe ou estrutura.Para mais informações e um exemplo, consulte Como: Define a Conversion operador.
Observação: |
---|
Valores usados com uma palavra-chave conversão deve ser válido para o tipo de dados de destino, ou ocorrerá um erro.Por exemplo, se você attem pt para converter um Long para um Integer, o valor da Long deve estar dentro do intervalo válido para o Integer tipo de dados. |
Cuidado: |
---|
Especificando CType Para converter de uma classe de tipo para outro falhará em time de execução se o tipo de fonte não é derivada do tipo de destino. Uma falha gera uma exceção InvalidCastException. |
No entanto, se um dos tipos for uma classe ou estrutura que você definiu, e se você tiver definido CType nessa classe ou estrutura, uma conversão pode terá êxito se ele satisfaz os requisitos de seu CType.SeeComo: Define a Conversion operador.
Executar uma conversão explícita é também conhecido como Elenco uma expressão a uma classe tipo ou objeto de dados especificados.
Consulte também
Tarefas
Como: Converter um objeto em outro tipo no Visual Basic
Solucionando problemas de Tipos de Dados
Conceitos
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)