A carga para gerenciar o heap (pilha, local especial da memória) pode tornar-se desproporcional em situações nas quais uma classe possui uma quantidade muito pequena de dados. Se assim for, é aconselhável definir o tipo como estrutura ao invés de classe. Desta forma, a carga de gerenciamento de memória é reduzida frequentemente, já que as estruturas são armazenadas na pilha.

Dito isto, podemos afirmar que Structs é uma estrutura de um determinado tipo. No C#, os tipos numéricos primitivos float, long e int são apelidos de estruturas. O long, por exemplo, é um apelido para System.Int64.

Segundo a documentação do Visual Studio 2008, “é um tipo por valor que é normalmente usado para encapsular pequenos grupos de variáveis relacionadas, como características de uma pessoa, por exemplo.” (tradução livre). Ainda segundo a documentação, Structs podem conter construtores, constantes, campos, métodos, propriedades, indexadores, operadores, eventos e tipos aninhados.

É importante dizer que o uso de diversos operadores comuns em nossos próprios tipos de estrutura, por padrão, não é possível.

A declaração de um tipo por valor de estrutura próprio é feita por meio da palavra-chave struct, seguida pelos seguintes itens:

  • Nome do tipo
  • Corpo da estrutura entre chaves, semelhante a uma classe (serão abordadas na parte 2 as diferenças entre struct e classes).

Veja um exemplo da sintaxe da struct a seguir:


    public struct Pessoa

    {

    public string Nome;

    public int Idade;

    }
    

Igualzinho uma classe né? Prometo que explico na parte 2 as diferenças entre elas!

Como dito anteriormente, é aconselhável usar o structs em conceitos leves, nos quais copiar valor é uma ação eficaz e performática. O uso das classes, por sua vez, é indicado para uma situação totalmente oposta, ou seja, para conceitos pesados, onde não devemos nem pensar em copiar valores (perceba que já expliquei um pouquinho das diferenças entre struct e classe!).

Confira na tabela abaixo uma relação dos tipos primitivos usados em C#, seus tipos equivalentes e sua respectiva definição (se é classe ou estrutura):

Tabela retirada da apostila de C# da Impacta Tecnologia
Palavra-Chave Tipo Equivalente Classe ou Estrutura
object System.Object Classe
String System.String Classe
bool System.Boolean Estrutura
byte System.Byte Estrutura
decimal System.Decimal Estrutura
double System.Double Estrutura
float System.Single Estrutura
int System.Int32 Estrutura
long System.Int64 Estrutura
Sbyte System.SByte Estrutura
short System.Int16 Estrutura
Uint System.UInt32 Estrutura
Ulong System.UInt64 Estrutura
Ushort System.UInt16 Estrutura

Assim finalizo o artigo. Na próxima parte veremos mais alguns conceitos essenciais para o melhor entendimento da Structs e finalizaremos o artigo criando um pequeno exemplo prático, não percam!