Postarei uma sequência de pequenos artigos explicando funcionalidades da linguagem C#, conforme vou aprendendo vou postando aqui. Vou começar falando sobre Generics.
Generics é um recurso múito interessante disponivel em algumas linguagens (Ada, Eiffel, Java, Haskell, C#, Visual Basic .NET, em C++ são conhecidos como Templates).
Problema: Você precisa implementar uma lista que aceite apenas um tipo específico de dados como por exemplo um struct (ou uma classe) representando um cliente ou um fornecedor.
Solução obvia: Criar uma classe descendente de System.Collections.List sobrescrevendo o método Add para aceitar o tipo desejado.
Problema dessa solução: Para cada tipo de dado diferente seria necessário implementar uma classe diferente.
Solução prática: Utilizar Generics! vamos a um exemplo bem simples.
Primeiro declaramos as estruturas de cliente e fornecedor para o exemplo:
struct Cliente
{
string Nome;
int Idade;
public Cliente(string aNome, int aIdade)
{
Nome = aNome;
Idade = aIdade;
}
}
struct Fornecedor
{
string Nome;
string RegiaoVenda;
public Fornecedor(string aNome, string aRegVenda)
{
Nome = aNome;
RegiaoVenda = aRegVenda;
}
}
Agora criaremos uma classe com um método de exemplo, esse método consiste em adicionar um cliente em uma lista:
class TesteGeneric
{
List<Cliente> lc = new List<Cliente>();
public TesteGeneric()
{
Cliente c = new Cliente("Cliente01", 20);
lc.Add(f);
}
}
Note na linha: List<Cliente> lc = new List<Cliente>(); estamos criando um objeto do tipo List mas que aceitará apenas dados do tipo Cliente, não precisamos criar nenhuma classe nova herdando de List e sobrescrever seus métodos.
para completar criaremos nossa classe principal que irá utilizar a classe criada anteriormente
public class inicial
{
static void Main()
{
TesteGeneric tg = new TesteGeneric();
foreach (Cliente c in tg.lc)
Console.WriteLine(c.Nome);
}
}
Compile e veja que nenhuma falha é mostrada, agora para testarmos se o recurso funciona mesmo, vamos tentar adicionar um fornecedor na lista, substitua a linha Cliente c = new Cliente(“Cliente01″, 20);
pela linha
Fornecedor c = new Fornecedor(“Fornecedor01″,”Norte do Paraná”);
Compile e verá que é exibido um erro parecido com esse:
Argument `#1′ cannot convert `Exemplos.Fornecedor’ expression to type `Exemplos.Cliente’
isso acontece pois nossa lista só aceita clientes.
Espero que tenha esclarecido o conceito mais básico ou pelo menos que eu tenha incitado sua curiosidade em descobrir o poder dos Generics.
Segue código fonte completo:
using System;
using System.Collections;
using System.Collections.Generic;
namespace Exemplos
{
struct Cliente
{
public string Nome;
public int Idade;
public Cliente(string aNome, int aIdade)
{
Nome = aNome;
Idade = aIdade;
}
}
struct Fornecedor
{
public string Nome;
public string RegiaoVenda;
public Fornecedor(string aNome, string aRegVenda)
{
Nome = aNome;
RegiaoVenda = aRegVenda;
}
}
class TesteGeneric
{
public List lc = new List();
public TesteGeneric()
{
Cliente c = new Cliente("Cliente01", 20);
lc.Add(c);
}
}
public class inicial
{
static void Main()
{
TesteGeneric tg = new TesteGeneric();
foreach (Cliente c in tg.lc)
Console.WriteLine(c.Nome);
}
}
}



gostei…
[...] declaramos uma lista de pessoas utilizando Generics (caso tenha alguma dificuldade com generics, veja estes exemplos e também criamos um métodos que preenche nossa lista com dados fictícios e o método principal [...]