LAYERDEV

 Busca Online:
 

Seja bem vindo(a) Visitante, voc no est logado deseja logar
na comunidade ASPNETi.COM e participar de servios e promoes ? clique aqui.

Generics na prática



Data Publicação: 18/8/2006 23:46:42
Total de visualizações: 5083

comente
Diminuir o tamanho das letras Aumentar o tamanho das letras


 

 

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

 



Total de visualizações: 5083
voltar   comente  subir


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): VOCÊ PRECISA LOGAR

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

Envio de e-mail através de formulário web
URL Indexável – Reescrever URL de uma forma amigável
Innovation Days
Novidade: Nomeação MVP Microsoft
iMove Developer: chegou para te ajudar
Atendimento online
Criando XML a partir de um DATASET tipado – Parte II
TV e Internet, um casamento perfeito
CES 2008: Keynote do Bill Gates
Trabalhando com LinkButton dentro do Gridview
Criando Números Aleatoriamente
II Encontro .NET em Brasília
Visual Studio 2010 Beta 2
Generics na prática
Visual SourceSafe 2 / 3 parte
Orientação a Objetos com Visual Studio.NET 2005 (o famoso OO) – parte 1
Mais detalhes sobre o HTC Touch HD 2 com o possível Windows Mobile 7
Sistema de Login em ASP – Parte IX
Vídeo HTC
Page.Header
GridView Parte I
Table ExoPC Slate
Inserindo no Sql Server
Convertendo String para Guid
Pegando dados do computador facilmente via software
Evento Java versus DotNet
Vídeo: Imagem Efeito
Mais um Windows Phone 7
Gerando Relatório e Exportando para o Excel Com Visual Studio.Net 2005
Deixe a sua webcan funcionar como instrumento de segurança
Copa Microsoft de Talentos em Brasília
Eventos e Webcasts
Criando Teclas de Atalho no Windows Form
Dell Streak Demo
Confira os 5 primeiros ganhadores da promoção assinatura online grátis DEVMEDIA.COM e ASPNETI.COM
Sobre o Autor
  [sumir] [aparecer]
 
Mauricio Junior Maurício Júnior
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 27 anos e possuo sete livros publicados pela editora Ciência Moderna no ano de 2009. Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.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.orgSite pessoal  www.mauriciojunior.org

Informaes Online
Usurios Online: 97
Artigos:  749
Vdeos:  61
PodCast's:  44
Frum:  3128
Empregos:  1385
Usurios Cadastrados: 6163
Publicidade
LAYERDEV




Vdeos Publicados
 

Duas dicas de internet - Google RealTime e OpenDNS

Desconfie sempre da internet e emails

Microsoft Office online no Safari funcionando

Inovação Visual Studio .NET 2010 - parte 4

Office Live online

TAB TAB na ferramenta Visual Studio .NET

Apresentação do IMC - Sistema de Controle de Peso Mobile

Inovação Visual Studio .NET 2010 - parte 3

Inovação Visual Studio .NET 2010 - parte 1

Download de vídeos com o Safari

Criando Chart - Novo componente integrado com o Visual Studio.NET 2010

Serviços: SAC e SMS integrado

Café com TI - Info sobre o Visual Studio.NET 2010 - WebConfig

Café com TI - Info sobre o Visual Studio.NET 2010

Café com TI - Vírus se passando por Correios

Café com TI - Novo jeito de mandar e-mail com vírus

Café com TI - Formatando todo tipo de String

Resolvido erro do Banco do Brasil no browser

Erro no site do Banco do Brasil com o Safari

Duas dicas do Snow Leopard

Incompatibilidade no Snow Leopard

E-mail com vírus, veja os detalhes

Café com TI - Continuando a configuração de Themes no site

Café com Ti - Banner Rotativo

Café com TI - Evento Eco Brasília

Café com TI - Themes dentro do ASPNETi.COM

Café com TI - Trabalhando com o iCal no Macbook

Café com TI - Deixando o rodapé do seu site fixo

Café com TI - Windows 7 sendo utilizado sem qualquer incompatibilidade

Café com Ti - ASP.NET - Explicando o componente ModalDialogExtender do Ajax Toolkit

Café com TI - Indexação de URL com ASP.NET

Café com TI - Configurando Mail para sua conta no HotMail
Enquete ASPNETi.COM
 Os podcasts tem sido proveitoso pra você?

Favor logar para votar
 
Publicidade Vertical
NETITC