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
*
*/