sábado, 23 de maio de 2009

Generics - Uma Grande adição a .Net

View this post in English

Olá a todos. Neste post vou mostrar algo muito legal a respeito da .Net: Generics.

Primeiro vou preparar o terreno para explicar o recurso: Vamos ter como exemplo uma estrutura básica:



struct Pessoa {
public string Nome;
public string Endereco;
public string CEP;
}


Nós temos aqui um exemplo clássico de uma estrutura de dados. Nela nós definimos campos com os tipos definidos de dados (claro, numa linguagem fortemente tipada). Isso significa que nós temos que fornecer os tipos de dados na hora em que a criamos. Mas, E se pudéssemos criar uma estrutura de dados onde o usuário (da estrutura, claro) escolha os tipos de dados dos atributos? Como assim? A estrutura possui dois atributos e o usuário diz de que tipo de dados são estes atributos antes de definir seus valores, tendo "aparência" de linguagem de tipagem fraca, mas com a vantagem de checagem de tipos em tempo de compilação.

Nada melhor para explicar do que um exemplo prático:


struct Par<TClasse1, TClasse2>
where TClasse1 : class
where TClasse2 : class {

public TClasse1 obj1;
public TClasse2 obj2;
}


Aqui vem o uso dos genéricos: Definimos uma estrutura, pedido que o usuário forneça dois tipo, TClasse1 e TClasse2, que dizemos abaixo que elas devem ser descendentes de object (ou object) e isso vira uma classe para ser referenciada dentro da struct.

A parte legal vem na hora em que começamos a utilizar esta estrutura. Abaixo tem mais um bloco de código:


class Cliente {
public int ID;
public string Nome;

public override string ToString() {
return string.Format("Cliente ID = {0}, Nome = {1}", ID, Nome);
}
}

class Produto {
public int ID;
public string Nome;

public override string ToString() {
return string.Format("Produto ID = {0}, Nome = {1}", ID, Nome);
}
}

struct Par<TClasse1, TClasse2>
where TClasse1 : class
where TClasse2 : class {

public TClasse1 obj1;
public TClasse2 obj2;
}

class Program {
static void Main(string[] args) {

var c = new Cliente { ID = 1, Nome = "Felipe" };
var p = new Produto { ID = 1, Nome = "Caneta BIC" };

var par = new Par<Cliente, Produto>() { obj1 = c, obj2 = p };

Console.WriteLine(par.obj1.ToString());
Console.WriteLine(par.obj2.ToString());

}
}



As chaves depois da nova instância das classes é uma facilidade do C# que nos permite criar uma nova instância de uma classe e atribuir valores aos membros públicos naquele momento.

Dentro do programa nós criamos instâncias das classes Cliente e Produto e definimos como atributos da nossa estrutura para usarmos depois. O detalhe é que, assim que nós definimos que as classes da estrutura são Cliente e Produto, o compilador não deixa nenhum outro valor; até o IntelliSense indica corretamente.

Espero que que vocês tenham gostado deste post e o assunto tenha despertado em vocês o interesse que despertou em mim. Muito obrigado e até a próxima.

Nenhum comentário:

Postar um comentário

 
BlogBlogs.Com.Br