quinta-feira, 11 de outubro de 2012

Framework Fundamentals (Generics)

Generics é a forma de trabalharmos com coleções fortemente tipadas. Em versões anteriores ao Framework 2.0, uma generalização era realizada pela conversão de tipos tendo como base o tipo geral System.Object. A coleção ArrayList pode ser usada sem modificação  para armazenar qualquer tipo de referência ou valor. Porém qualquer tipo de referência ou de valor realiza uma conversão por trás pelo typecast para o tipo System.Object. Se for tipo de valor sofrerá boxing e unboxing quando recuperado. Consequentemente comprometem com o desempenho do software. Para tratarmos esse tipo de problema, entramos com o conceito de Generics que nos dá mais eficiência nos eventos e segurança permitindo passarmos um tipo de parametro tipicando tal coleção. Abaixo mostrei via código o uso de Genérics.

O código abaixo cria duas classes sendo a segunda genérica. Elas processarão da mesma forma, salvo a segunda classe que pode receber qualquer tipo de dado sem a  necessidade de realizar boxing e unboxing.


Aqui criamos dois exemplos para passarmos os valores para as classes. No primeiro exemplo não veremos o uma diferença, porém o método genérico será mais rápido devido a forma tipada que a coleçao está demonstrando. O segundo exemplo onde usei as mesmas classes, mas passei valores numéricos, irá acontecer um erro, pois o cast realizado em "(int)objNaoGenerico2.nome" pois realiza um cast para tipo int e não para double. Infelizmente o compildor não pegará o erro. Então, em C#, uma exceção é lançada em tempo de execução.



Espero ter contribuído de alguma forma. Comentem, corrija, vamos compartilhar conhecimentos desse mundo gigantesco que é o universo de desenvolvimento de software.

Abraços.