|
||
|
|
|
Avaliação:
![]() ![]() ![]() ![]() | Publicado em: 29/08/2006Generics na plataforma DOT NET - Parte I
Marcelo Diniz Graduando em Ciência da Computação pela Universidade Católica de Pernambuco, Microsoft Certified Professional (MCP) em ASP.NET, colaborador do Centro de Inovação Microsoft Recife, palestrante em Pernambuco sobre .NET 3.0 (WinFX).
Nesta série de artigos estarei abortando duas grandes novidades no .NET Framework 2.0, Generics e algumas API´s genéricas. Este conceito de Generics é muito poderoso, na verdade não é uma novidade, já tinhamos este conceito em C++, que são conhecidos por Templates. Na versão 5 do Java também temos generics, mas uma diferença é que em .NET temos classes nativas em generics ganhando performance com isso.
Um dos cenários típos da utilização de generics são coleções tipadas. Nas versões anteriores do .NET Framework não existia generics, com isso, várias coleções eram declaradas com o tipo object, para que não houvessem problemas com sua manipulação, entretando, perdíamos na performance pois utilizando object nas coleções teríamos que utilizar vários conversões para os tipos que estivéssemos precisando e não tínhamos flexibilidade. Para demonstrar este problema irei utilizar o exemplo clássico de generics.
No código temos um objecto pilha que é instanciado da class Stack. Depois de adicionar dois elementos inteiros nesta pilha, queremos retornar o elemento do topo da pilha, porém, o método Pop() retorna um object. Com isso temos que utilizar um cast para retornar um inteiro da pilha. A mesma coisa iria acontecer se estivessemos adicionando valores reais na pilha e depois retirando, um cast é sempre necessário. Fica bem claro que este fato gera alguns problemas como performance prejudica, por causa de casts constantes e problemas com a usabilidade da API. No modelo que tínhamos com o .NET Framework 1.x, era necessário saber quais tipos existiam na pilha antes de manipular a pilha. Com o .NET Framework 2.0 algumas coisas mudam. Foram criadas novas classes de coleções utilizando generics. Estas novas classes se encontram no namespace System.Collections.Generics. Cada coleção deste namespace possui um parâmetro de tipo. Este parâmetro de tipo especifica o tipo que se deseja inserir na coleção. Por convenção utilizamos a letra "T" para simbolizar este tipo que irá trafegar pela coleção. Tirando este detalhe do parâmtro, iremos manipulas as classes genéricas da mesma maneira que utilizamos as classes não genéricas. Usando um classe genérica, esta classe se torna fortemente tipada consequentemente não teremos mais problemas com performance por não será mais necessário utilizar casts o tempo todo. Veja no exemplo a seguir o que como foi a mudança. Antes de Generics Class Stack } Depois de Generics Class Stack<T> Como podemos ver introduzimos um parâmetro T na classe Stack e este mesmo T será o nosso tipo de retorno do método Pop. Com isso ganhamos uma certa flexibilidade, pois podemos definir este parámetro T com qualquer tipo. Iremos ver um exemplo prático desta classe:
Neste código podemos ver que o retorno do método Pop() é um inteiro, com isso não precisamos fazer um cast. Temos uma boa performance neste caso. Bom pessoal, esta foi uma pequena introdução sobre Generics, aguardem as outras partes deste artigo, pois temos muita coisa para ver com Generics.
http://msdn.microsoft.com/vcsharp/ Marcelo Diniz Links relacionados
Thiago <thiago@jgjksa.com>
Você pode melhorar seu português. Facilita na leitura do texto.
![]() ![]() ![]() ![]() ![]() Kleber Bemvenuto
Alguém aqui já fez um sistema de pilha ?? Colocar exemplos práticos.. E esses exemplos que em todos sites tem.
![]() ![]() ![]() ![]() ![]() Eduardo <galaangola@hotmail.com>
Gostei e acredito que posso aprender muito aqui. Sou jornalista, designer e muito interessado em internet. Nao programo nada, mas quero aprender, como gosto de internet o q vc considera um caminho interessante para alguem que realmente entende muito pouco de programacao se auto iniciar?
![]() ![]() ![]() ![]() ![]() Loris <loris.mkt@ig.com.br>
O assunto é muito interessante e super importante quando se trata de reaproveitamento de código. O artigo apresenta alguns erros de concordancia e tempo verbal, mas nada que uma revisão não resolva. Parabéns pela iniciativa.
![]() ![]() ![]() ![]() ![]() ![]() |
|
|