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.
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