Operadores is e as


Depois de 3 e-mails recebidos em menos de 1 mes, onde colegas me perguntaram para que serve e qual a diferença entre os operadores is e as do C#, resolvi postar aqui a resposta que enviei à eles e, assim contribuir com os demais colegas que possam ter a mesma dúvida.

Operador is:
Este operador verifica se objeto é compatível com um determinado tipo, e o resultado desta avaliação é um valor booleano (True ou False). A vantagem deste operador é que ele nunca lançará uma Exception, mesmo quando os tipos não forem compatíveis. O código abaixo demonstra isso:

     public class Cliente{}
     //….
     object obj = new Object();
     bool teste1 = (obj is Object); // Retorna True
     bool teste2 = (obj is Cliente); // Retorna False

Assim sendo, podemos ter um if comparando se o tipo é compatível com outro e sendo, fazermos o cast (conversão):

     if(obj is Cliente){
          Cliente c = (Cliente)o;
          //….
     }

O único problema deste código é que o CLR verificará o tipo do objeto duas vezes, ou seja, na condicional o operador is fará essa verificação e, logo após, passando por esta verificação e agora já dentro do bloco if antes da conversão ser feita, uma nova verificação é realizada perdendo assim em performance.

Operador as:
É neste caso que o operador as entra em ação. Ele verifica se o objeto é compatível com o tipo Cliente e, se for, o operador retorna um ponteiro (não nulo) para este objeto. Se caso o tipo não for compatível, então como o operador is, também é retornado nulo. Com isso, o tipo só é verificado uma vez. O código abaixo exemplifica o uso do operador as e comprova o ganho no desempenho:

     Cliente c = obj as Cliente;
     if(c != null){
          //….
     }

Lembre-se que a verificação (if) se faz necessário, pois caso o objeto for incompatível, o operador as retornará nulo, e uma Exception do tipo System.NullReferenceException será atirada ao cliente.

Nota: Felizmente no VB.NET 2005 teremos também um operador semelhante: o TryCast, como é explicado neste post.

Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s