LAYERDEV

 Busca Online:

 
Seja bem vindo(a) Visitante, você não está logado deseja logar
no portal para participar de serviços e promoções ? clique aqui.


No caso de perder a senha, acesse aqui e receba por e-mail.
Deseja entrar em contato conosco, acesse aqui e mande-nos um e-mail.

Generics na prática

por Mauricio Junior em 1/1/2011 0

 

 

Com a ferramenta lançada pela Microsoft, surgiram também alguns métodos novos e uma nova maneira para criar uma lista de dados. Nós chamamos de Generics. Generics é uma característica na versão do framework . NET 2.0 dentro do runtime CLR, com o conceito de parâmetros no qual cria a possibilidade de designer classes e métodos. A especificação de um ou mais tipos, até classe ou método que for declarado e instanciado pelo código do cliente. Por exemplo, usando um genérico do tipo parâmetros T, você pode escrever uma simples classe que outros códigos clientes possam utilizar sem gerar custo ou risco do runtime casts ou operações boxing.

 

Coleções

 

Com o Generics abre a possibilidade de trabalhar com coleções e realmente utilizar orientação a objetos. Sistema orientado a objetos é muito mais do que apenas classes e métodos. O namespace que preciso importar ao meu projeto é a System.Collections.Generics. O .NET 2.0 veio para resolver os problemas anteriores em relação a coleções.

 

 

Na prática

 

O código (referência generics.1.1) é um exemplo que mostra como gerar uma classe generic GenericList<T> que contém uma listas de inteiros. Simplesmente mudando o tipo de argumento, o código da referência (generics.1.1) poderá ser facilmente modificado para criar listas de strings ou várias outros tipos customizados.

 

 

 

//importes

using System.Collections.Generics

 

class TesteList

{

    static void Main()

    {

        // int is the type argument

        GenericList<int> lista = new GenericList<int>();

 

        for (int x = 0; x < 10; x++)

        {

            lista.AddHead(x);

        }

 

        foreach (int i in lista)

        {

            System.Console.Write(i + " ");

        }

        System.Console.WriteLine("\nDone");

    }

}

Referência: Generics.1.1

 

No exemplo, mostra claramente uma lista sendo preenchida e mais abaixo escrita no console. Uma lista pode ser fortemente “tipada” de acordo com a sua classe gerada, ou seja, no sistema possui uma classe do tipo “Usuario", pode ser feito uma lista desse tipo e preenchido de uma forma fácil, rápida e prática.

 

O próximo exemplo gerará uma lista do tipo “Usuario”, logo após pegar os dados do banco e preenche-la.

 

Seguindo, cliquei com o botão direito em cima do projeto e adicionei um nova classe com o nome Usuario.cs. Gerei três propriedades, uma do tipo int e o restante string. (Referência: Generics.1.2)

 

 

 

 

    private int _chave;

    private string _nome;

    private string _email;

 

Referência: Generics.1.2

 

Depois de gerar as propriedades, utilizei a tela de atalho CTRL + R em seguida CTRL + E, essas teclas de atalho servem para gerar Get e Set das propriedades.

Caso não queira usar as teclas de atalho, basta utilizar o menu Refactor e escolher a opção Encapsulate Field... (Referência Generics.1.3)

 

 

Referência: Generics.1.4

 

 

A referência Generics.1.5 mostra o código gerado na classe Usuario.cs.

 

 

    public string Email

    {

        get { return _email; }

        set { _email = value; }

    }

 

    public string Nome

    {

        get { return _nome; }

        set { _nome = value; }

    }

 

    public int Chave

    {

        get { return _chave; }

        set { _chave = value; }

    }

 

Referência: Generics.1.5

 

 

Mostrarei um exemplo básico conectando no banco de dados e preenchendo a lista do tipo Usuario. Gerei uma página .ASPX com o nome Generics.aspx. Na parte HTML, adicionei um componente GridView com o nome gridView. (Referência Generics.1.6)

 

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Generics.aspx.cs" Inherits="Generics" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>Generics</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <asp:GridView ID="gridView" runat="server">

           

        </asp:GridView>

    </div>

    </form>

</body>

</html>

 

Referência: Generics.1.6

Não acrescentei nada dentro do gridview criado anteriormente. Passando para o código Generics.aspx.cs, criei o método getUsuario() que retorna uma lista de usuários. Criei a conexão, fiz o select, abri o banco de dados com o comando Open(). Criei uma lista de usuário, executei o ExecuteReader(), adicionei a um while o datareader criado e por final fui adicionando na lista. Depois que adicionei na lista retornei-a. Veja o código. (Referência Generics.1.7)

 

 

 

private List<Usuario> getUsuario()

    {

        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString))

        {

            using (SqlCommand command = new SqlCommand("select chave, nome, email from tb001_usuario", conn))

            {

                conn.Open();

                List<Usuario> listUsu = new List<Usuario>();

                using (SqlDataReader dr = command.ExecuteReader())

                {

                    while (dr.Read())

                    {

                        Usuario usuario = new Usuario();

                        usuario.Chave = (int)dr["chave"];

                        usuario.Nome = (string)dr["nome"];

                        usuario.Email = (string)dr["email"];

                        listUsu.Add(usuario);

                    }

                }

                return listUsu;

            }

        }

    }

Referência: Generics.1.7

 

 

 

Explicação:

 

Note que depois de abrir o banco de dados, gerei um List<Usuario>. Esse <Usuario> é o nome de minha classe, ou seja, estou “tipando” a minha lista para o tipo da classe Usuario.cs que possui apenas propriedades get e set.

Executei o comando ExecuteReader() e logo abaixo criei um laço enquanto a variável “DataReader” tiver dados.

 

Dentro do “while”, criei uma nova variável da classe “Usuario” criada anteriormente e fui adicionando o valor do “DataReader” dentro da variável criada Usuario com suas respectivas propriedades.

 

 

 

   Usuario usuario = new Usuario();

   usuario.Chave = (int)dr["chave"];

   usuario.Nome = (string)dr["nome"];

   usuario.Email = (string)dr["email"];

 

Referência: Generics.1.8

 

 

No fim do while pego a lista e uso o “Add” passando o “usuario”. Dessa forma, os valores são adicionados na lista.

 

 

                   while (dr.Read())

                    {

                        Usuario usuario = new Usuario();

                        usuario.Chave = (int)dr["chave"];

                        usuario.Nome = (string)dr["nome"];

                        usuario.Email = (string)dr["email"];

                        listUsu.Add(usuario);

                    }

Referência: Generics.1.9

 

Ao fim de tudo, retorno a lista preenchida.

 

return listUsu;

 

Referência: Generics.1.10

 

 

No método Page_Load, atribui o resultado do método ao DataSource do gridview, em seguida usei o DataBind(). Para não confundir, segue o código de toda página .cs. (Referência Generics.1.11)

 

 

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Data.SqlClient;

 

//importes

using System.Collections.Generic;

 

public partial class Generics : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        this.gridView.DataSource = getUsuario();

        this.gridView.DataBind();

    }

 

    private List<Usuario> getUsuario()

    {

        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString))

        {

            using (SqlCommand command = new SqlCommand("select chave, nome, email from tb001_usuario", conn))

            {

                conn.Open();

                List<Usuario> listUsu = new List<Usuario>();

                using (SqlDataReader dr = command.ExecuteReader())

                {

                    while (dr.Read())

                    {

                        Usuario usuario = new Usuario();

                        usuario.Chave = (int)dr["chave"];

                        usuario.Nome = (string)dr["nome"];

                        usuario.Email = (string)dr["email"];

                        listUsu.Add(usuario);

                    }

                }

                return listUsu;

            }

        }

    }

}

 

Referência: Generics.1.11

 

 

A única especificação não mostrada foi o banco de dados. Segue. (Referência Generics.1.12).

 

 

Referência: Generics.1.12

 

 

Resultado final. (Referência Generics.1.13)

 

 

Referência: Generics.1.14

 

 

Bom, fico por aqui, espero que tenha gostado e aprendido um pouco.  Qualquer dúvida, favor entrar em contato pelo e-mail mauricio@aspneti.com.

 

 

Livros publicados:

 

 

 

Maurício Junior

www.aspneti.com

www.mauriciojunior.org

 

voltar   comente  subir

Download Copy





 
Mauricio Junior Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; .
Tenho 29 anos e possuo sete livros publicados pela editora Ciência Moderna. Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, ECODE10.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A. Blog: blog.mauriciojunior.org, Site pessoal www.mauriciojunior.org



Comentários:

Comentado por: Alekcey - 20/8/2006 15:42:23
este eh um texto traduzido???
Comentado por: Mauricio Junior - 20/8/2006 15:50:40
Olá Alekcey, respondendo sua pergunta: não é um texto traduzido. Espero que esteja gostando do artigo.

Comente (dê sua opinião):

Comentário:
Código Imagem:  (digite o código da imagem respeitando maiúsculo e minúsculo)

Favor digitar o código da imagem para cadastramento.

 

Outros Artigos do Autor

Windows Forms Application – Alterando Arquivo de Configuração Dinamicamente
Resources e Internacionalização usando Visual Studio.NET 2005 (Parte IV)
Ajax parte II
IsAlpha
Construindo o Windows 8
Visual Studio .NET 2010 com temas
Trabalhando com Session
Microsoft® Expression® Web
Dll Ajax
Framework SkyMenu
Perguntas Mais Freqüentes de ASP.NET
Convertendo e salvando imagens via código
Linha do GridView (colorindo ao passar o mouse)
Sistema Calcula IMC e IGC no Celular
Saiba como fazer download de vídeo na web
Criptografando Senha
Como utilizar CSS no VS 2003
Dados via Post no VS 2005
Podcast publicado no site
Chart - novo componente integrado Visual Studio .NET 2010
Token e Sessão Corrente com C#.NET
Gravando Erros com Exception - Parte I
Finanças para os filhos
Vídeo do Visual SourceSafe - Parte I
Vídeo Sobre Atributes e String Builder com Visual Studio .NET 2005
Membership
Formatando String rapidamente
Trabalhando com GridView e RowCommand
Usando public interface
2 Eventos, 1 dia: Mix On UniEURO
Trabalhando com GridView e DataKeyNames com Várias Chaves
Desktop Linux Ubuntu
Teclas de atalho - Visual Studio .NET 2005
Usando Dll Nativa e Using
Adicionar uma coluna em um DataTable




eCode10 Magazine 4 Edição

Baixe a sua sem pagar nada, basta apenas ter um cadastro na comunidade aspneti.com ou ser usuário do ecode10.com.



Edições anteriores
LAYERDEV

Notícias *

Notebook 3D ou 4K?

Notebook vem com tudo...

Visão do Futuro - Day of Glass 2

Futuro próximo pode chegar cedo?...

Lenovo de 14 polegadas IdeaPad

Veja o novo notebook Lenovo IdeaPad...

Windows 8 Store

Channel9 publica um vídeo da Windows Store...

Sony Vaio série Z

Novo Vaio Ultrabook? ou não Ultrabook?...

Samsung quer comprar RIM

Imagine se juntar as duas companhias...

Surface 2.0 mostrado

Novo Surface é mostrado de forma incrível...

Skype Tablet

Será que esse skype tablet pega mesmo?...

Lenovo e o seu novo Ultrabook

Ultrabook chega também pela Lenovo...




NETITC