Operador DirectCast (Visual Basic)
Introduz uma operação de conversão de tipo com base em herança ou implementação.
Observações
DirectCast
não usa as rotinas auxiliares de tempo de execução do Visual Basic para conversão, portanto, ele pode fornecer um desempenho um pouco melhor do que CType
ao converter para e do tipo Object
de dados.
Você usa a DirectCast
palavra-chave semelhante à maneira como você usa a função CType e a palavra-chave TryCast Operator . Você fornece uma expressão como o primeiro argumento e um tipo para convertê-lo como o segundo argumento. DirectCast
requer uma relação de herança ou implementação entre os tipos de dados dos dois argumentos. Isso significa que um tipo deve herdar ou implementar o outro.
Erros e Falhas
DirectCast
Gera um erro de compilador se detetar que não existe nenhuma relação de herança ou implementação. Mas a falta de um erro do compilador não garante uma conversão bem-sucedida. Se a conversão desejada estiver se estreitando, ela poderá falhar em tempo de execução. Se isso acontecer, o tempo de execução lança um InvalidCastException erro.
Palavras-chave de conversão
Uma comparação das palavras-chave de conversão de tipo é a seguinte.
Palavra-chave | Tipos de dados | Relação de argumento | Falha em tempo de execução |
---|---|---|---|
Função CType | Qualquer tipo de dados | A conversão de alargamento ou estreitamento deve ser definida entre os dois tipos de dados | Lançamentos InvalidCastException |
DirectCast |
Qualquer tipo de dados | Um tipo deve herdar ou implementar o outro tipo | Lançamentos InvalidCastException |
Operador TryCast | Apenas tipos de referência | Um tipo deve herdar ou implementar o outro tipo | Não devolve nada |
Exemplo
O exemplo a seguir demonstra dois usos de DirectCast
, um que falha em tempo de execução e outro que é bem-sucedido.
Dim q As Object = 2.37
Dim i As Integer = CType(q, Integer)
' The following conversion fails at run time
Dim j As Integer = DirectCast(q, Integer)
Dim f As New System.Windows.Forms.Form
Dim c As System.Windows.Forms.Control
' The following conversion succeeds.
c = DirectCast(f, System.Windows.Forms.Control)
No exemplo anterior, o tipo de tempo de execução de q
é Double
. CType
é bem-sucedido porque Double
pode ser convertido em Integer
. No entanto, o primeiro DirectCast
falha em tempo de execução porque o tipo de tempo de execução não tem relação de Double
herança com Integer
o , mesmo que exista uma conversão. O segundo DirectCast
é bem-sucedido porque converte de tipo Form para tipo Control, do qual Form herda.