C# - Usando Generics (revisitado)  - II


  Neste artigo vamos rever o conceito de Generics e aplicar esses conceitos criando uma classe genérica.

Continuando o assunto do artigo anterior vamos criar uma classe genérica mais elaborada para mostrar os recursos do Generics.

Vamos criar uma lista de itens genérica e definir métodos para poder incluir e obter itens da lista.

Recursos Usados:

Criando seu próprio tipo Genérico

Abra o VS 2017 Community e crie um projeto do tipo Console Application.

Vamos definir uma classe Genérica ListaItens<T> com 3 métodos conforme o código abaixo:

  1. GetItem(int index) - retorna um item da lista pelo seu índice;
  2. Add(T novoItem) - inclui um novo item na lista;
  3. PrintItens() - imprime a lista de itens;
using System;
namespace cshp_Generics
{
    public class ListaItens<T>
    {
        private T[] itens;
        public ListaItens()
        {
            itens = new T[0];
        }
        public T GetItem(int index)
        {
            return itens[index];
        }
        public void Add(T novoItem)
        {
            T[] novosItens = new T[itens.Length + 1];
            for (int index = 0; index < itens.Length; index++)
                novosItens[index] = itens[index];
            novosItens[novosItens.Length - 1] = novoItem;
            itens = novosItens;
        }
        public void PrintItens()
        {
            foreach(T t in itens)
            {
                Console.WriteLine(t);
            }
        }
    }
}

Nesta classe criamos um array privado chamado itens onde o tipo do array é T - nosso tipo genérico. Assim sempre que alguém usar a nossa classe, terá que escolher o tipo que deseja usar.

Se alguém usar o tipo ListaItens<int> teremos um array de inteiros, se usar o tipo ListItens<string> teremos um array de strings.

No construtor da classe definimos que nosso array terá zero elementos a iniciar.

No método GetItem() retorna um item particular da lista. Observe que o tipo retornado é do tipo T, o nosso tipo. Se usarmos int vai retornar int, se usarmos double, vai retornar double, etc.

O método Add() precisa aumentar o tamanho do array ao receber novos itens, e aqui novamente usamos o nosso tipo T como um parâmetro de entrada para o método, assim estamos aptos a adicionar somente itens do tipo que foi definido na lista.

O método PrintItens() foi incluido apenas para listar os itens da lista.

Para ver a nossa classe funcionando vamos incluir o código abaixo no método Main():

    class Program
    {
        static void Main(string[] args)
        {
            ListaItens<string> t1 = new ListaItens<string>();
            t1.Add("tarefa 1");
            t1.Add("tarefa 2");
            t1.Add("tarefa 3");
            t1.PrintItens();
            WriteLine($"Item de indice 1: {t1.GetItem(1)}");
            ReadLine();
        }
    }

Faltou implementar o método para remover itens, para ordenar itens, etc., mas criamos a classe apenas para mostrar como o Generics funciona pois já temos tudo isso pronto nas coleções Genéricas : List<T>, Collection<T>, IEnumerable<T>, IList<T>, ICollection<T>, LinkedList<T>, etc.

Veja os links abaixo que mostra como usar as coleções genéricas:

Dessa forma, pra que reinventar a roda ???

"Havendo Deus antigamente falado muitas vezes, e de muitas maneiras, aos pais, pelos profetas, a nós falou-nos nestes últimos dias no Filho (Jesus)"
Hebreus 1:1

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti