VB.NET - Casting : Ctype e DirectCast
Tanto o VB.NET como C# são linguagens fortemente tipadas ( como Java), isto significa que o compilador verifica por compatibilidades de tipos em tempo de execução em quase todos os casos , impedindo atribuições incompatíveis , proibindo atribuições questionáveis e fornecendo casts quando a compatibilidade de um tipo puder ser determinada apenas em tempo de execução.
Algumas conversões ocorrem automaticamente, sem você ter que se preocupar. Por padrão no VB.NET o casting é automático quando você atribui objetos a variáveis. Os objetos são então convertidos à força para o tipo da variável. Este comportamento pode ser influenciado pelas declarações:
- Option
Strict On - (padrão) -
o casting é restrito é não é automático
- Option Strict Off -
permite conversões implícitas no seu código
Para realizar um casting explícito (conversão forçada) podemos usar o operador Ctype() ou DirectCast()
Dim Q As Object = 2.37 ' Requer Option Strict Off. Dim I As Integer = CType(Q, Integer) ' Funciona Dim J As Integer =DirectCast(
Q, Integer)
' Falha
Ambas as palavras chaves tomam uma expressão a ser convertida como primeiro argumento e o tipo a converter como segundo argumento.
Se não houver uma conversão definida entre o tipo de dados da expressão e o tipo especificado a ser convertido tanto Ctype como DirectCast não irão funcionar. Tanto Ctype como DirectCast lançam a exceção InvalidCastException.
Qual a diferença entre Ctype e DirectCast ?
A diferença entre os dois é que para funcionar , Ctype apenas necessita que haja uma conversão válida definida entre a expressão e o tipo para o qual a conversão vai ser feita ; DirectCast requer que o tipo em tempo de execução de uma variável objeto seja o mesmo que o tipo especificado para conversão.
Se o tipo definido e o tipo da expressão em tempo de execução forem o mesmo , o desempenho de DirectCast é melhor do que o de Ctype.
Então , se você tem certeza de que a expressão é do mesmo tipo para o qual a conversão vai ser realizada use DirectCast ; se tiver dúvidas use Ctype.
Como eu posso verificar o tipo particular de um objeto ?
R: Usando o operador TypeOf.
Exemplo : Para verificar se obj é do tipo TextBox fazemos: If TypeOf obj Is TextBox Then...
Nota: Para obter um objeto do tipo System.Type para um tipo definido use o operador GetType e para obter um objeto do tipo Sytem.Type para um objeto use o método GetType.
Dim t As
System.Type t = GetType(String) MessageBox.Show(t.FullName) |
Dim t as System.Type t = obj.GetType() MessageBox.Show(t.FullName) |
operador GetType | Método GetType |
Concluindo ...
1- CType é capaz de realizar uma conversão forçada(Casting) ou uma conversão. DirectCast faz apenas a conversão.
Por conversão eu quero dizer que um tipo de dados é convertido em outro . Ex: String para integer, object para string , etc...
Por conversão forçada (cast) eu quero dizer que a alteração de um tipo de objeto em outro tipo relacionado é feito se:
- o tipo para o qual você esta convertendo o objeto é do mesmo tipo do objeto :
Dim j as String = "Macoratti"
Dim c as Object = j
Dim m as string = directcast(c, String)
Como a variável c é um objeto que
contém uma string logo podemos usar DirectCast para
fazer um cast para m pois m é do mesmo tipo de c. Se não fosse
teríamos que usar Ctype.
2- DirectCast é mais rápido que Ctype
Exemplo:
Dim obj1 As Object
Dim obj2 As Object
Dim i As Integer
obj1 = 1 ' o1
contém um inteiro empacotado
obj2 = "1"
' o2 contém um string
' Funciona pois obj1 contém um integer
i = DirectCast(obj1, Integer)
' Falha pois obj2 contém uma string
que é diferente de Integer
i = DirectCast(obj2, Integer)
' Funciona pois existe uma conversão
de String para Integer
i = CType(obj2, Integer)
Até o próximo artigo ...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
FSO - Tratando drives, diretórios e arquivos - Macoratti.net