Conversões implícitas e explícitas (Visual Basic)
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 em um valor de ponto flutuante de precisão única antes de k
atribuí-lo ao 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. Visual Basic fornece várias palavras-chave, que coagem uma expressão entre parênteses para o tipo de dados desejado. Essas palavras-chave agem como funções, mas o compilador gera o código embutido, então a execução é um pouco mais rápida do que com uma chamada de função.
Na extensão a seguir do exemplo anterior, a CInt
palavra-chave converte o valor de back em um inteiro antes de q
atribuí-lo 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 expressão de dados permitidos a serem convertidos |
---|---|---|
CBool |
Tipo de dados booleanos | Qualquer tipo numérico (incluindo Byte , SByte , e tipos enumerados), String , Object |
CByte |
Tipo de dados de byte | Qualquer tipo numérico (incluindo SByte e enumerados tipos), Boolean , String , Object |
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 , SByte , e tipos enumerados), Boolean , String , Object |
CDec |
Tipo de dados decimais | Qualquer tipo numérico (incluindo Byte , SByte , e tipos enumerados), Boolean , String , Object |
CInt |
Tipo de dados inteiros | Qualquer tipo numérico (incluindo Byte , SByte , e tipos enumerados), Boolean , String , Object |
CLng |
Tipo de dados longos | Qualquer tipo numérico (incluindo Byte , SByte , e tipos enumerados), Boolean , String , Object |
CObj |
Tipo de dados do objeto | Qualquer tipo |
CSByte |
Tipo de dados SByte | Qualquer tipo numérico (incluindo Byte e enumerados tipos), Boolean , String , Object |
CShort |
Tipo de dados curtos | Qualquer tipo numérico (incluindo Byte , SByte , e tipos enumerados), Boolean , String , Object |
CSng |
Tipo de dados único | Qualquer tipo numérico (incluindo Byte , SByte , e tipos enumerados), Boolean , String , Object |
CStr |
Tipo de dados de cadeia de caracteres | Qualquer tipo numérico (incluindo Byte , SByte , e tipos enumerados), Boolean , Char , Char matriz, 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 para a palavra-chave de conversão correspondente Ao converter para um tipo de dados composto, as interfaces que implementa e as classes das quais herda Ao converter para uma classe ou estrutura na qual você sobrecarregou CType , essa classe ou estrutura |
CUInt |
Tipo de dados UInteger | Qualquer tipo numérico (incluindo Byte , SByte , e tipos enumerados), Boolean , String , Object |
CULng |
Tipo de dados ULong | Qualquer tipo numérico (incluindo Byte , SByte , e tipos enumerados), Boolean , String , Object |
CUShort |
Tipo de dados UShort | Qualquer tipo numérico (incluindo Byte , SByte , e tipos enumerados), Boolean , String , Object |
A função CType
A função CType opera com base em dois argumentos. A primeira é a expressão a ser convertida e a segunda é o tipo de dados de destino ou 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. Isto melhora o desempenho.
Para obter uma comparação com as outras palavras-chave de conversão de CType
tipo, consulte Operador DirectCast e 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á-lo 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 que você definiu. Isso permite que você converta valores de e para o tipo de sua classe ou estrutura. Para obter mais informações e um exemplo, consulte Como definir um operador de conversão.
Nota
Os valores usados com uma palavra-chave de conversão devem ser válidos para o tipo de dados de destino ou ocorre um erro. Por exemplo, se você tentar converter a Long
em um Integer
, o valor do deve estar dentro do intervalo válido para o Integer
tipo de Long
dados.
Atenção
A especificação CType
para converter de um tipo de classe para outro falhará em tempo de execução se o tipo de origem não derivar do tipo de destino. Tal falha lança uma InvalidCastException exceção.
No entanto, se um dos tipos for uma estrutura ou classe que você definiu, e se você tiver definido CType
nessa estrutura ou classe, uma conversão poderá ser bem-sucedida se atender aos requisitos do seu CType
. Consulte Como: Definir um operador de conversão.
Executar uma conversão explícita também é conhecido como transmitir uma expressão para um determinado tipo de dados ou classe de objeto.