Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Uma conversão implícita não requer nenhuma sintaxe especial no código-fonte. No exemplo a seguir, o Visual Basic converte implicitamente o valor de k em um valor de ponto flutuante de precisão única antes de atribuí-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 de conversão de tipo. O Visual Basic fornece várias palavras-chave, que coagim uma expressão entre parênteses ao tipo de dados desejado. Essas palavras-chave agem como funções, mas o compilador gera o código embutido, portanto, a execução é um pouco mais rápida do que com uma chamada de função.
Na extensão seguinte do exemplo anterior, a CInt palavra-chave converte o valor de q novamente para um inteiro antes de atribuir a 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 de conversão
A tabela a seguir mostra as palavras-chave de conversão disponíveis.
| Palavra-chave de conversão de tipo | Converte uma expressão em tipo de dados | Tipos de dados permitidos de expressão a serem convertidos |
|---|---|---|
CBool |
Tipo de dados booliano | Qualquer tipo numérico (incluindo Byte, SBytee tipos enumerados), String, Object |
CByte |
Tipo de Dados Byte | Qualquer tipo numérico (incluindo SByte tipos enumerados), Boolean, , StringObject |
CChar |
Tipo de dados Char |
String, Object |
CDate |
Tipo de Dados de Data |
String, Object |
CDbl |
Tipo de dados duplo | Qualquer tipo numérico (incluindo Byte, SBytee tipos enumerados), Boolean, , StringObject |
CDec |
Tipo de dados decimal | Qualquer tipo numérico (incluindo Byte, SBytee tipos enumerados), Boolean, , StringObject |
CInt |
Tipo de dados inteiro | Qualquer tipo numérico (incluindo Byte, SBytee tipos enumerados), Boolean, , StringObject |
CLng |
Tipo de Dados Long | Qualquer tipo numérico (incluindo Byte, SBytee tipos enumerados), Boolean, , StringObject |
CObj |
Tipo de Dados de Objeto | Qualquer tipo |
CSByte |
Tipo de dados SByte | Qualquer tipo numérico (incluindo Byte tipos enumerados), Boolean, , StringObject |
CShort |
Tipo de dados curto | Qualquer tipo numérico (incluindo Byte, SBytee tipos enumerados), Boolean, , StringObject |
CSng |
Tipo de dados único | Qualquer tipo numérico (incluindo Byte, SBytee tipos enumerados), Boolean, , StringObject |
CStr |
Tipo de dados de cadeia de caracteres | Qualquer tipo numérico (incluindo Byte, SByte e 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 permitidos são os permitidos pela palavra-chave de conversão correspondente. Ao converter em um tipo de dados composto, as interfaces que ele implementa e as classes das quais ele herda Ao converter em uma classe ou estrutura na qual você sobrecarregou CType, essa mesma classe ou estrutura |
CUInt |
Tipo de dados UInteger | Qualquer tipo numérico (incluindo Byte, SBytee tipos enumerados), Boolean, , StringObject |
CULng |
Tipo de Dados ULong | Qualquer tipo numérico (incluindo Byte, SBytee tipos enumerados), Boolean, , StringObject |
CUShort |
Tipo de Dados UShort | Qualquer tipo numérico (incluindo Byte, SBytee tipos enumerados), Boolean, , StringObject |
O operador CType
O Operador CType opera em dois argumentos. A primeira é a expressão a ser convertida e a segunda é o tipo de dados de destino ou a classe de objeto. Observe que o primeiro argumento deve ser uma expressão, não um tipo.
CType é uma função embutida, o que significa que o código compilado faz a conversão, muitas vezes sem gerar uma chamada de função. Isso melhora o desempenho.
Para obter uma comparação de CType com as outras palavras-chave de conversão de tipo, consulte o Operador DirectCast e o Operador TryCast.
Tipos elementares
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 compostos
Você pode usar CType para converter valores em tipos de dados compostos, bem como em tipos elementares. Você também pode usá-la para coagir uma classe de objeto ao tipo de uma de 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 obter mais informações e um exemplo, consulte Conversões de Matriz.
Tipos que definem CType
Você pode definir CType em uma classe ou estrutura definida. Isso permite que você converta valores para o tipo da sua classe ou estrutura e vice-versa. Para obter mais informações e um exemplo, consulte Como definir um operador de conversão.
Observação
Os valores usados com uma palavra-chave de conversão devem ser válidos para o tipo de dados de destino ou ocorrerá um erro. Por exemplo, se você tentar converter um Long para um Integer, o valor do Long deve estar dentro do intervalo válido para o tipo de dados Integer.
Cuidado
Especificar CType para converter um tipo de classe em outro falhará em tempo de execução se o tipo de origem não derivar do tipo de destino. Essa falha gera uma exceção InvalidCastException .
No entanto, se um dos tipos for uma estrutura ou classe que você definiu e se você dispuser de CType nessa estrutura ou classe, uma conversão pode ser bem-sucedida se atender aos requisitos de sua CType. Veja como definir um operador de conversão.
A execução de uma conversão explícita também é conhecida como conversão de uma expressão para um determinado tipo de dados ou classe de objeto.