O título do post merecia uma análise muito mais profunda, mas vou apenas "dar uma pincelada" em 2 coisas que achei muito boas na versão 2.0 do .NET, o ASP .NET 2.0 e o conceito de Generics.
Sobre o ASP.NET 2.0 me fascina a incrivel evolução em todos os sentidos vindo da versão anterior ( só pra citar alguns, Master Pages e os novos controles do ex-Atlas e agora ASP.NET AJAX ). Nesse tópico vou ficar devendo sobre esses tópicos, mas tentarei fazer alguns artigos específicos sobre eles.
Por hora gostaria muito de elucidar um básico do básico sobre Generics, as Listas Fortemente tipadas que vieram pra deixar no ostracismo ( ainda bem, aliás ) a classe ArrayList \o/!!!
Se o leitor programou em .NET na versão 1.1, talvez já saiba que quando usamos a classe ArrayList para armazenarmos nossos objetos estamos fazendo algo um tanto quando deselegante programaticamente, mas pq?
Simples, ao usarmos a classe ArrayList como no exemplo abaixo, ao incluir um item ( por exemplo uma instancia da classe Pessoa ) estamos na verdade, tranformando essa pessoa num simples Object, pois internamente um ArrayList é um Object[] !!
Sobre o ASP.NET 2.0 me fascina a incrivel evolução em todos os sentidos vindo da versão anterior ( só pra citar alguns, Master Pages e os novos controles do ex-Atlas e agora ASP.NET AJAX ). Nesse tópico vou ficar devendo sobre esses tópicos, mas tentarei fazer alguns artigos específicos sobre eles.
Por hora gostaria muito de elucidar um básico do básico sobre Generics, as Listas Fortemente tipadas que vieram pra deixar no ostracismo ( ainda bem, aliás ) a classe ArrayList \o/!!!
Se o leitor programou em .NET na versão 1.1, talvez já saiba que quando usamos a classe ArrayList para armazenarmos nossos objetos estamos fazendo algo um tanto quando deselegante programaticamente, mas pq?
Simples, ao usarmos a classe ArrayList como no exemplo abaixo, ao incluir um item ( por exemplo uma instancia da classe Pessoa ) estamos na verdade, tranformando essa pessoa num simples Object, pois internamente um ArrayList é um Object[] !!
// Aqui adiciono um objeto pessoa num ArrayList
ArrayList list = new ArrayList(1);
Pessoa pessoa = new Pessoa(); list.Add(pessoa);
// Se bem que não é muito diferente se eu fizesse isso aqui:
Object[] array = new Object[1];
array[0] = pessoa;
Não que esse código não irá funcionar, mas para a manipulação dos objetos nesse ArrayList ao usarmos um For ou um Foreach, temos que novamente converter o objeto para Pessoa quando formos recuperá-lo, além de que, com essa prática, ao cometermos algum erro de conversão, o mesmo não é achado na compilação.
// Aqui recupero corretamente o objeto
Pessoa novaPessoa = (Pessoa)list[0];
// Porém se eu fizer isso aqui, o programa continua compilando, mas reornará uma exception de
// Invalid Cast em tempo de execução
Carro carro = (Carro)list[0];
No .NET 1.1, poderiámos criar uma coleção tipada, mas mesmo assim ainda estariamos fazendo o boxing e unboxing, além de ser uma tarefa tediosa em grande sistemas.
class ColecaoPessoa : CollectionBase
{
public void Add( Pessoa pessoa )
{
base.InnerList.Add(pessoa);
}
public Pessoa this[int indice]
{
get
{
return (Pessoa)base.InnerList[indice];
}
set
{
base.InnerList[indice] = value;
}
}
}
E ai que entra o Generics, podemos abolir de vez toda essa parafernália anterior, apenas com isso:
// O mundo maravilhoso das listas tipadas
List list = new List();
list.add(pessoa);
// Nada de casts \o/
Pessoa novaPessoa = list[0];
// Isso gera um erro em tempo de compilação!!
Carro carro = list[0];
Isso é como eu disse, uma pequena "pincelada" no que podemos fazer com Generics.
Ficou interessado???
Recomendo a leitura desse Excelente livro da editora Wrox:
Vc nao tem ele?? Puxa... um passarinho me contou que vc acha ele aki: =P