Posted by programatik under
.net,
dotnet,
framework | Etiquetas:
.net,
c#,
dotnet,
framework |
No Comments
Existem duas formas de realizar um cast em C#:
Prefix-casting:
SuperClasse a;
SubClasse b = (SubClasse) a;
ou
SuperClasse a;
SubClasse b = a as SubClasse;
Em geral, usamos uma forma ou outra por apenas costume, programadores que vieram do java tem o costume de usar o prefix-casting e programadores que vieram do VB usam o as-casting, porém existem diferenças entre os dois tipos de casting que é importante estar atento.
A principal diferença entre um e outro é o que acontece quando o cast falha. Imagine, por exemplo que a SubClasse não faz herança com a SuperClasse, nesse caso o prefix-cast dispara uma exceção, entretanto o as-cast apenas retorna null quando o cast falha, deixando a execução prosseguir.
Logo é mais fácil tratar o erro em programas que usam o prefix-casting e tornando-os mais simples de debugar, pois o prefix-cast dispara a exceção no momento que o problema é mais óbvio. O as-casting só disparará a exceção quando alguem tentar acessar um membro do mesmo, assim disparando uma null pointer exception.
Se é dificil o tratamento de erros com as-casting, porque as pessoas usam? Apenas por um pequeno mas importante detalhe, o as-casting chega a ser 5x mais rápido que o prefix-casting. Confira você mesmo nesse artigo: http://www.codeproject.com/KB/cs/csharpcasts.aspx