Busca online em todo site:
NETITC

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




Título do Artigo

Generics na prática


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

comente
 


 

 

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: 4805
voltar   comente  subir

Autor:


Por: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


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 ESTAR LOGADO

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

Mobilidade e Aplicativos Mobile
As várias mensagens do Sistema Operacional
Vídeo: Windows Phone com Windows Mobile 7
Internet Explorer 8
Evento BrasilDotNet 2008
Instalar o Windows Marketplace no celular
Sistema que faz busca no google
Como fazer uma enquete - parte 1
Novo SO Palm, depois da venda...
Vídeo: Framework de dados - parte 1
Descobrindo e criando tecla de atalho com Windows Forms
Adicionando Menu no DataGridView
Sistema Calcula IMC e IGC no Celular
Backup, qual a importância dele na sua vida?
Criptografando Senha
Aspirador de pó inteligente
Pop3 aberto no Hotmail
CRIANDO MENU DINÂMICO COM C#.NET Passo 1
Sistema de Login com ASP 3.0 usando três camadas – Parte I
Skyfire - browser mobile
Registro .COM.BR com CPF
Vídeo sobre banco de dados
Torne-se Autor de Artigos
Desenvolvimento de Aplicativos para TV Digital
Ajax com Visual Studio.NET 2005
Concurso Office
Sistema de Login em ASP Utilizando três camadas - Parte VIII
SELECT INSERT
Resources e Internacionalização usando Visual Studio.NET 2005 (Parte I)
E-mail Carta de Amor - Vírus
Convite de Lançamento do Windows 7
Vídeo-Aula: Criando um Sistema para Celular com Banco de Dados
Problemas no sistema de busca
MinimizeBox no Celular
Desenvolvimento de Aplicativos para TV Digital - Parte 2

Publicidade:

[sumir] [aparecer]
DEVMEDIA




Informaes Online:

Usurios Online: 794
Artigos:  663
Vdeos:  47
PodCast's:  31
Frum:  3098
Empregos:  1226
Usurios Cadastrados: 5794

Categoria de Artigos

Vdeos

Enquete - D sua opinio

 Os podcasts tem sido proveitoso pra você?

 

Colaboradores

Foto Autor autor: Mauricio Junior   
publicou 382 artigo(s).
Foto Autor autor: Júlio Battisti   
publicou 51 artigo(s).
Foto Autor autor: Fabio Galante Mans   
publicou 28 artigo(s).
Foto Autor autor: Kleber Becerra   
publicou 10 artigo(s).
Foto Autor autor: Ramon Durães   
publicou 6 artigo(s).
Foto Autor autor: Ebenézer de Souza   
publicou 5 artigo(s).
Foto Autor autor: Fabio Aguiar   
publicou 4 artigo(s).
NETITC