.NET

29 out, 2010

Generics – Dinamismo no C# – Parte 1

Publicidade

A linguagem C# é fortemente tipada, ou seja, o tratamento dos dados são realizados com a definição explícita de seus tipos. Por exemplo, se sabe-se que a variável x receberá um valor numérico inteiro, esta variável deve ser declarada da seguinte forma int x;.

O C# é fortemente tipado e é fundamental que seja assim, pois somente assim pode-se garantir a segurança das informações que trafegam no sistema. O grande problema desta abordagem é: conversões sucessivas (boxing e unboxing), fato este que impacta diretamente na performance do sistema e, além disso, abre margem para conversões indevidas.

Para solucionar este tipo de problema, a partir da versão 2.0 o .NET Framework implementa o mecanismo de Generics (Genérico, em português).


O que é Generics?

Basicamente uma estrutura genérica é aquela que pode receber qualquer tipo de dado suportado pela .NET Framework. Assim, tem-se uma independência do tipo de dado a ser armazenado pela estrutura.

Para trabalharmos com estruturas genéricas, precisamos importar o namespace System.Collections.Generic pois, é neste namespace que estão implementadas as classes resposáveis pelo recurso.

Classes e métodos genéricos recebem como parâmetro entre os sinais de maior e menor (< >) o(s) tipo(s) de dado(s) para o(s) qual(is) as operações deverão ser implementadas. A Listagem 1 apresenta um trecho de código para dar base a teoria apresentada.

using System.Collections.Generic;
//
//
//
List<Carros> lstCarros = new List<Carros>();
Carros meuCarro = new Carros();
meuCarro.Marca = "Chevrolet";
meuCarro.Modelo = "Astra";
meuCarro.Ano = "2008";
meuCarro.Modelo = "2009";
lstCarros.Add(meuCarro);
//
//
//
meuCarro = lstCarros[0];

Listagem 1: Exemplo de utilização de uma estrutura genérica

O código da Listagem 1 é relativamente simples. Talvez duas características tenham lhe chamado a atenção no código acima. A primeira delas é a utilização da expressão < > a frente da palavra List. Esta é a nomenclatura padrão para para o trabalho com estruturas genéricas no C#. Dentro do sinal de < e > deve-se colocar o tipo de dados sobre o qual aquela estrutura deverá aplicar suas operações. Como já foi mencionado, quaisquer tipos de dados suportados pela .NET Framework são aceitos neste espaço, inclusive aqueles criados por você (como é o caso de nosso exemplo).

A segunda característica que chama a atenção no código da Listagem 1 é o fato de, na linha 15, não precisarmos efetuar o casting para a recuperação do valor. Isto só é possível porque no momento da criação da lista, “dissemos ao compilador” que aquela lista manipularia valores do tipo Carro, portanto, como são do mesmo tipo o casting não é necessário.

Você pode estar se perguntando: Mas Fabrício, qual a importância disso? A resposta é simples. Imagine que, em determinado momento você precisasse efetuar o mesmo tipo de operação que está sendo executada para os carros, mas agora para caminhões. Bastaria criar um novo tipo caminhões (com suas respectivas características) mudar o parâmtero que a List recebe. Pronto, tudo estaria funcionando normalmente. Legal não?

Bom pessoal, neste primeiro artigo vou parar por aqui, pois, a idéia é apresentar uma estrutura genérica e qual sua relevância no desenvolvimento de aplicativos. Na segunda parte deste artigo iremos construir um aplicativo web que se conecta ao banco de dados e exibe os valores provenientes dele de forma genérica.

Grande abraço a todos e até lá! Não deixe de mandar seu feedback através de seus comentários.