 VB.NET - Casting : Ctype e DirectCast
 
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 Facebook
  
 Compartilhe no Twitter
 
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