sexta-feira, 20 de abril de 2007

Como usar Struct no C#

Como usar Struct no C#

/*

* struct
*
* Vamos falar sobre struct, struct nada mas é que você poder criar uma estrutura,
* vamos entender qual a facilidade de criar uma estrutura, vamos supor um seguinte
* você precisa fazer um programa que pergunte para o usuário qual seu sexo, altura
* e peso, lógico, a primeira vista, e não está errado, podemos criar 3 variáveis
* string sexo; double altura; double peso; vamos ver como ficaria.
*

*/

// declaro as variáveis que vou usar
string sexo;
double peso, altura;

// escrevo e recebo o sexo
Console.WriteLine("Qual seu sexo?");
sexo = Console.ReadLine();

// escrevo e recebo a altura
Console.WriteLine("Qual sua altura?");
altura = Convert.ToDouble(Console.ReadLine());

// escrevo e recebo p peso
Console.WriteLine("Qual seu peso?");
peso = Convert.ToDouble(Console.ReadLine());

// escrevo na tela o sexo, a altura e o peso digitados
Console.WriteLine("Seu sexo é {0}, sua altura é {1} e seu peso é {2}", sexo, altura, peso);



Console.WriteLine("Aperte qualquer tecla para ver o mesmo programa com struct...");
Console.ReadLine();

/*
*
* este programa faz o que é preciso certo, ele pega o sexo, a altura, o peso e mostra na tela,
* mas pense comigo, esses dados são referente a uma pessoa certo, então uma pessoa tem sexo, altura e peso
* é isso que consiste uma estrutura, nós estamos definindo que a pessoa, para o que nosso programa precisa,
* tem sexo, peso e altura, bem como passar isso para o c#,
* public struct pessoa
* {
*
* public string sexo;
* double altura;
* double peso;
*
* }
* o que estamos fazendo acima??? Estamos criando uma estrutura pessoa que tem como propriedades sexo, altura e peso
* porque é disso que nosso programa usa para fazer o que queremos, o struct tem que ser colocado depois das declarações
* das classes
*
* using System;
* using System.Collections.Generic;
* using System.Text;
* public struct pessoa
* {
*
* public string sexo;
* public double altura;
* public double peso;
*
* }
*
* Vamos alterar nosso programa para usar a strutc (estrutura):
*

*/

pessoa dadosPessoa = new pessoa();

// escrevo e recebo o sexo
Console.WriteLine("Qual seu sexo?");
dadosPessoa.sexo = Console.ReadLine();

// escrevo e recebo a altura
Console.WriteLine("Qual sua altura?");
dadosPessoa.altura = Convert.ToDouble(Console.ReadLine());

// escrevo e recebo o peso
Console.WriteLine("Qual seu peso?");
dadosPessoa.peso = Convert.ToDouble(Console.ReadLine());

// escrevo na tela o sexo, a altura e o peso digitados
Console.WriteLine("Seu sexo é {0}, sua altura é {1} e seu peso é {2}", dadosPessoa.sexo, dadosPessoa.altura, dadosPessoa.peso);


Console.WriteLine("Aperte qualquer tecla para ver um vetor de struct...");
Console.ReadLine();

/*
*
* Percebam que nosso código diminuiu muito pouco, duas a três linhas, em programas pequenos vai ser dificil ver
* a vantagem de se usar a estrura, mas se você reparar bem, já foi uma grande vantagem, voltamos ao código,
* temos a declaração de uma variável dadosPessoa nela já contém sexo, altura e peso declarado.
*
* vamos para outro exemplo prático de como usar a struct como um vetor, no próximo exemplo vamos criar uma agenda para 10 contatos
* com nome, email e telefone dos contatos, vamos primeiro criar uma em vetor para depois compararmos com a agenda
* feita com struct
*
*/

string[] nome = new string[4]; // declaramos um vetor com 4 posições do tipo string para armazenar o nome
string[] email = new string[4];// declaramos um vetor com 4 posições do tipo string para armazenar o email
int[] telefone = new int[4]; // declaramos um vetor com 4 posições do tipo int para armazenar o telefone

// adicionamos nas posições dos respectivos vetores os valores
nome[0] = "José";
email[0] = "jose@dominio.com.br";
telefone[0] = 32323232;
nome[1] = "Mario";
email[1] = "mario@dominio.com.br";
telefone[1] = 32154698;
nome[2] = "Maria";
email[2] = "maria@dominio.com.br";
telefone[2] = 98654785;
nome[3] = "Gançalvez";
email[3] = "gonca@dominio.com.br";
telefone[3] = 32654285;

// percorre o vetor e imprime os dados na tela
for (int i = 0; i < nome.Length; i++)
{
Console.WriteLine("Nome: {0}\tE-mail: {1}\tTelefone: {2}\n", nome[i], email[i], telefone[i]);
}

Console.WriteLine("Aperte qualquer tecla para ver a agenda com um vetor de struct...");
Console.ReadLine();

/*
*
* Bem, já sabemos como se cria um vetor de um tipo qualquer, e sabemos criar um novo tipo de estrutura,
* então vamos criar um vetor desse novo tipo que irá ser criado.
* Certo primeiro crie a seguinte struct:
* public struct agenda
* {
* public string nome;
* public string email;
* public int telefone;
* }
*
* criamos um struct chamado agenda com a estrutura nome, email e telefone, agora vamos criar os vetores
*
*/


agenda[] dadosAgenda = new agenda[4]; // criamos um vetor do tipo agenda com 4 posições

// inserindo os dados

dadosAgenda[0].nome = "José";
dadosAgenda[0].email = "jose@dominio.com.br";
dadosAgenda[0].telefone = 32323232;

dadosAgenda[1].nome = "Mario";
dadosAgenda[1].email = "mario@dominio.com.br";
dadosAgenda[1].telefone = 32154698;

dadosAgenda[2].nome = "Maria";
dadosAgenda[2].email = "maria@dominio.com.br";
dadosAgenda[2].telefone = 98654785;

dadosAgenda[3].nome = "Gançalvez";
dadosAgenda[3].email = "gonca@dominio.com.br";
dadosAgenda[3].telefone = 32654285;

// percorre o vetor e imprime os dados na tela
for (int i = 0; i < dadosAgenda.Length; i++)
{
Console.WriteLine("Nome: {0}\tE-mail: {1}\tTelefone: {2}\n", dadosAgenda[i].nome, dadosAgenda[i].email, dadosAgenda[i].telefone);
}

Console.WriteLine("Aperte qualquer tecla para ver a agenda com um vetor de struct...");
Console.ReadLine();

/*

* visualmente para o usuário não muda nada, mais para o programador usar a struct nesse caso é bem melhor
* o código fica visualmente melhor, não temos que trabalhar com 3 vetores, cria-se um vetor apenas de uma estrutura
* que você precisa.
*
*
*
*
*
*
*
* Avançado
*
* Agora vamos passar para um nível mais avançado, tente entender comigo, eu vou criar um tipo de dados do tipo agenda
* mais nele eu vou implementar um código que addiciona o registro, veja:
*
* public struct agendaAvancada
{
public string nome;
public string email;
public int telefone;
public void AddRegistro(string sNome, string sEmail, int iTelefone)
{
nome = sNome;
email = sEmail;
telefone = iTelefone;
}
}
*
* note que a estrutura é a mesma, mas com um implemento, eu coloquei uma função que serve para adcionar os dados no registro,
* ou seja, inves de vc adicionar os registros assim:
*
* dadosAgenda[0].nome = "José";
* dadosAgenda[0].email = "jose@dominio.com.br";
* dadosAgenda[0].telefone = 32323232;
*
* vamos fazer da seguinte forma:
*
* dadosAgenda[0].addRegistro("José","jose@dominio.com.br",32323232);
*
* veja como ficaria nossa agenda agora
*
*/

agendaAvancada[] dadosAgendaAvancada = new agendaAvancada[4]; // criamos um vetor do tipo agenda com 4 posições

// inserindo os dados

dadosAgendaAvancada[0].AddRegistro("José", "jose@dominio.com.br", 32323232);
dadosAgendaAvancada[1].AddRegistro("Mario", "mario@dominio.com.br", 32154698);
dadosAgendaAvancada[2].AddRegistro("Maria", "maria@dominio.com.br", 98654785);
dadosAgendaAvancada[3].AddRegistro("Gançalvez","gonca@dominio.com.br",32654285);

// percorre o vetor e imprime os dados na tela
for (int i = 0; i < dadosAgenda.Length; i++)
{
Console.WriteLine("Nome: {0}\tE-mail: {1}\tTelefone: {2}\n", dadosAgenda[i].nome, dadosAgenda[i].email, dadosAgenda[i].telefone);
}

Console.ReadLine();

/*

bem galera essa última parte foi mesmo para vocês terem um dimensão de como podemos facilitar as coisas no C#,
* o C# é uma linguagem de programação muito ampla e conhecer suas ferramentas e sa capacidade é muito importante para não fazer
* as "gambiarras" da programação.
*
* espero ter ajudado, essa parte de estrutura é meio complicado de explicar, mais acho que fui bem feliz na minha explicação
* qualquer coisa só me perguntar
*
*
* Douglas Wellington
* e-Mail: dwsg15net@gmail.com
*
*/

5 comentários:

Charles Oliveira (Marabá-PA) disse...

Olá Douglas,

Muito Bom seu exemplo...
Sei que ja faz tempo que escreveste este artigo, no entanto, so agora o li.

Gostaria de saber como faria se dentro do vetor agenda eu quiser armazer mais de um telefone.
criar um vetor de telefone dentro da struct.

Anônimo disse...

Obrigado por Blog intiresny

Tiago disse...

Muito bom cara, parabéns!

Quando o assunto é classe, acho muito difícil achar algo tão bem explicado, isso aí!

Vou procurar mais aqui no seu blog!

Abraços!

Anônimo disse...

Olá, muito obrigada mesmo pelo artigo! Está maravilhoso, entendi cada detalhe! Eu estava precisando para minha aula... obrigada pela ótima explicação. Parabéns pelo blog ^^

Anônimo disse...

Boa noite, bele?
Estou tentando aprender mais sobre struct e pelo que observei eu posso criar uma classe do tipo pessoa que vai dar da mesma, isto é, no ponto de vista que quem vai consumir esta classe, a pergunta é: Existe alguma diferença, qualquer que seja ela, em usar a palavra struct da declaração de uma classe?