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):
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!