Share via


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 k para o valor de um 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 dessas palavras-chave, que forçam 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 a seguir do exemplo anterior, a palavra-chave CInt converte o valor de q de volta em um inteiro antes de 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 regras de conversão disponíveis.

Palavra-chave de conversão de tipo Converte uma expressão em tipo de dados Tipos de dados de expressão permitidos para serem convertidos
CBool Tipo de dados booliano Qualquer tipo numérico (incluindo Byte, SByte e tipos enumerados), String, Object
CByte Tipo de Dados Byte Qualquer tipo numérico (incluindo SByte e tipos enumerados), Boolean, String, Object
CChar Tipo de Dados de Caractere 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 Decimal Qualquer tipo numérico (incluindo Byte, SByte e tipos enumerados), Boolean, String, Object
CInt Tipo de Dados Integer Qualquer tipo numérico (incluindo Byte, SByte e tipos enumerados), Boolean, String, Object
CLng Tipo de Dados Long Qualquer tipo numérico (incluindo Byte, SByte e tipos enumerados), Boolean, String, Object
CObj Tipo de dados Object Qualquer tipo
CSByte Tipo de Dados SByte Qualquer tipo numérico (incluindo Byte e tipos enumerados), Boolean, String, Object
CShort Tipo de Dados Short Qualquer tipo numérico (incluindo Byte, SByte e tipos enumerados), Boolean, String, Object
CSng Tipo de Dados Simples Qualquer tipo numérico (incluindo Byte, SByte e tipos enumerados), Boolean, String, Object
CStr Tipo de Dados String 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 em 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 em um tipo de dados composto, as interfaces que ele implementa e as classes das quais 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, 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

Função CType

A Função CType opera em dois argumentos. O primeiro é a expressão a ser convertida, e o segundo é 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. Isso melhora o desempenho.

Para obter uma comparação de CType com as outras palavras-chave de conversão de 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á-la para forçar 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.

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 em um Integer, o valor do Long deve estar dentro do intervalo válido para o tipo de dados Integer.

Cuidado

Especificar que CType converta 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. Essa falha gera uma exceção InvalidCastException.

No entanto, se um dos tipos for uma estrutura ou classe que você definiu, e se tiver definido CType nessa estrutura ou classe, uma conversão poderá ser bem-sucedida se atender aos requisitos do seu 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.

Confira também