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.

Consulte também