Existem duas formas de realizar um cast em C#:

Prefix-casting:

C#:

SuperClasse a;
SubClasse b = (SubClasse) a;

as-casting

C#:

SuperClasse a;
SubClasse b = a as SubClasse;

Resposta:

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

Tags: .net, c#

Endereço de trackback para este post

Trackback URL (clique direito e copie atalho/localização do link)

1 trackback

Trackback de: unBuggers [Visitante]
Diferentes tipos de casting e C#
Existem diferentes tipos de casting em C#, o mais usado é o que colocamos entre parênteses o tipo da classe antes da variável do objeto:

prefix-casting:
Object o = new MinhaClasse();
MinhaClasse m = (MinhaClasse)o;

Pra quem programava em VB exi...
13.10.08 @ 07:10

Esse post tem 5 feedbacks esperando moderação...

Deixe seu comentário


Seu endereço de e-mail não será revelado nesse site.

Sua URL será exibida.
(Quebras de linha se tornam <br />)
(Nome, e-mail & website)
(Permitir que usuários o contatem através de um formulário eletrônico (seu e-mail não será exibido.))