sábado, 6 de abril de 2019

Linguagem C# - Structs (Estruturas)


Caro leitor, neste artigo irei explicar e exemplificar o uso das denominadas “Structs”, traduzindo para o português “Estruturas” na linguagem C#. Antes de entrarmos na parte conceitual, para entendermos melhor, faremos uma breve reflexão do conceito de Classes. As classes definem tipos de referência que são armazenados em duas áreas de memória denominada: “heap” e “stack”. Nos casos que necessitamos criar algo para armazenar uma quantia menor de dados poderemos utilizar “Structs”, a qual faz o uso apenas de uma área de memória, a “stack”. As estruturas também são conhecidas como uma classe simplificada e são utilizadas para criar tipos de valor, por esta razão que são armazenadas na “stack” (na pilha). Sendo assim, o “overhead” de gerenciamento de memória será bastante reduzido. Na sua declaração podemos possuir campos, métodos e construtores com algumas limitações. Uma característica crucial é que a variável de estrutura armazena diretamente os dados ao passo que uma classe armazena uma referência na pilha a uma área de memória. Podemos concluir que o uso adequado dos Structs há uma economia de memória.

*Stack: é uma forma otimizada para organizar dados na memória alocados em sequência e abandonados (sim, normalmente não há desalocação) em sequência invertida a da entrada.

*Heap: é a organização de memória mais flexível que permite o uso de qualquer área lógica disponível.

*Overhead: Em ciência da computação overhead é geralmente considerado qualquer processamento ou armazenamento em excesso, seja de tempo de computação, de memória, de largura de banda ou qualquer outro recurso que seja requerido para ser utilizado ou gasto para executar uma determinada tarefa. (Fonte: https://pt.wikipedia.org/wiki/)

Caracaterísticas específicas

É importante salientear que as “Structs” compartilham grande parte da sintaxe de classes, embora sejam mais limitados.

Podemos conferir alguns tópicos importantes:

·         As “Structs” são copiadas na atribuição. Quando uma estrutura é atribuída a uma nova variável, todos os dados são copiados e qualquer modificação na nova cópia, não é refletida na estrutura original. Isso é importante lembrar-se ao trabalhar com coleções de tipos de valor, como um Dictionary < string, myStruct >.

·         Na declaração de uma estrutura, campos não podem ser inicializados exceto se elas forem declaradas como “const” ou “static”.

·         Diferentemente das classes, “Structs” pode ser instanciada sem usar o operador “new”.

·         Não podemos declarar um construtor padrão (um construtor sem parâmetros) ou um destruidor.

·         Como foi dito anteriormente, são denominados tipos de valor e classes são tipos de referência.

·         Uma estrutura pode implementar interfaces.

·         Uma estrutura não pode herdar uma outra estrutura ou classe, e também não pode ser base de uma classe.Todas as estruturas são herdadas diretamente de System.ValueType, o qual herda de System.Object.

·         Pode ser usada como um tipo nullable (anulável) e pode ser atribuída um valor nulo.



Sintaxe de utilização

A declaração de uma estrutura é idêntica com a de uma classe. Poderemos conferir a sintaxe na listagem 01.

Exemplo:

struct Exemplo
{

     //Declaração de propriedades e métodos

}
Listagem 01.

Para entendermos de uma forma mais abrangente no código abaixo irei detalhar um pouco melhor implementando propriedades e métodos. Criando um campo do tipo String para Nome e logo em seguida encapsulando o mesmo e outro do tipo “int” para idade, o qual será retornado na função “ObterIdade()”. Ver Listagem 01.

Exemplo:

public struct ExemploCompleto
{

 
// Campos
  private string nome;
  private int idade;

  // Propriedades Encapsuladas
  public string Nome
  {
      get
      {
           return Nome;
      }
      set
      {
           Nome = value;
       }
  }

 //Métodos
 public int ObterIdade()
 {
      return idade;
 }
}
Listagem 01.



Criando um Exemplo

Para isto abra o Microsoft Visual Studio e Crie um projeto do início. No meu caso estarei utilizando Windows Forms. O exemplo se baseará na criação de uma Estrutura que nos retornará Nome, CPF, Cidade e Idade. Usarei apenas um botão no Formulário. Ver Imagem 01.

Figura 01: Formulário de Exemplo.


Esta estrutura nos retornará todos os dados supracitados. Ver Listagem 03.

struct Dados
{

Criaremos as propriedades privadas.

   private int idade;

   private string nome;

   private string cpf;

   private string cidade;

No construtor passaremos por parâmetro a quantidade de variáveis que acharmos necessário, no nosso caso passarei todas as 4, para em seguida atribuí-las para as respectivas propriedades.

public Dados(int ida, string nom, string cpf, string cid)
{
      this.idade = ida;
      this.nome = nom;
       this.cpf = cpf;
       this.cidade = cid;
}

O método “RetornarDados” irá retornar todos os dados alimentados e que foram atribuídos no construtor.

public string RetornarDados()
{
return String.Format
(
"Eu me chamo {0}, CPF nº {1}, tenho {2} anos e moro na Cidade de {3}.",
          this.nome,
          this.cpf,
          this.idade.ToString(),
          this.cidade
          );
 }
}

Para instanciá-lo:

private void button1_Click(object sender, EventArgs e)
{
Dados dados = new Dados(30,"Thiago","123456789-123", "Avaré");
       MessageBox.Show(dados.RetornarDados());
}

Figura 02: Exemplo em Run-Time.

Conclusões

A linguagem C# nos dá a possibilidade de criar “Structs” (Estruturas) para armazenar uma quantia menor de dados economizando processamento. Pudemos aprender neste artigo, um pouco da teoria junto com pequenos exemplos de utilização deste recurso presente nesta linguagem.
Fica aí a dica pessoal, um abraço e até o mês que vem!

Referências
https://msdn.microsoft.com/pt-br/library/ms173109.aspx

 

Nenhum comentário:

Postar um comentário