domingo, 26 de janeiro de 2025

Diferenças Entre Struct e Class no C#: Quando Usar Cada Um?

No C#, as Structs e Classes são dois dos blocos de construção fundamentais para criar programas bem estruturados. Embora possam parecer semelhantes à primeira vista, existem diferenças importantes que determinam quando cada uma deve ser utilizada. Vamos explorar as características de ambos, entender suas diferenças e saber quando é melhor escolher uma Struct ou uma Class.


O que é uma Struct?

Uma Struct (abreviação de "estrutura") é um tipo de dado por valor no C#. Isso significa que, ao atribuir uma variável Struct a outra, é criada uma cópia do valor. As Structs são ideais para representar objetos pequenos e simples.

Características principais:

  • Armazenadas na pilha de memória (stack), o que melhora a performance em certos cenários.
  • São tipos imutáveis por boas práticas (embora tecnicamente possam ser modificadas).
  • Não suportam herança (exceto a herança implícita da classe System.ValueType).
  • Recomendadas para objetos leves, como coordenadas, datas ou valores numéricos agrupados.

Exemplo de uma Struct:

public struct Ponto
{
    public int X { get; set; }
    public int Y { get; set; }

    public Ponto(int x, int y)
    {
        X = x;
        Y = y;
    }

    public double DistanciaAoOrigem()
    {
        return Math.Sqrt(X * X + Y * Y);
    }
}

O que é uma Class?

Uma Class é um tipo de dado por referência no C#. Ao atribuir uma variável de Class a outra, ambas as variáveis passam a apontar para o mesmo objeto na memória. Classes são mais flexíveis e amplamente utilizadas para criar objetos complexos e persistentes.

Características principais:

  • Armazenadas no heap de memória, com gerenciamento feito pelo Garbage Collector.
  • Suportam herança e polimorfismo.
  • Ideais para objetos que precisam de comportamento mais complexo ou que podem ser modificados frequentemente.

Exemplo de uma Class:

public class Pessoa
{
    public string Nome { get; set; }
    public int Idade { get; set; }

    public Pessoa(string nome, int idade)
    {
        Nome = nome;
        Idade = idade;
    }

    public void Apresentar()
    {
        Console.WriteLine($"Olá, meu nome é {Nome} e tenho {Idade} anos.");
    }
}

Principais Diferenças Entre Struct e Class


Quando Usar Struct?

  • Quando você precisa de objetos pequenos e leves, como coordenadas, vetores ou cores.
  • Quando o comportamento do objeto é imutável.
  • Quando você deseja evitar o impacto do Garbage Collector.

Exemplo prático:

Ponto p1 = new Ponto(3, 4);
Ponto p2 = p1; // Cópia do valor, não a referência
p2.X = 10;
Console.WriteLine(p1.X); // Imprime 3

Quando Usar Class?

  • Quando o objeto precisa ser complexo e modificável.
  • Quando o comportamento requer herança, interfaces ou polimorfismo.
  • Quando o objeto terá ciclo de vida longo e será compartilhado entre diferentes partes do código.

Exemplo prático:

Pessoa pessoa1 = new Pessoa("João", 25);
Pessoa pessoa2 = pessoa1; // Ambas as variáveis apontam para o mesmo objeto
pessoa2.Nome = "Maria";
Console.WriteLine(pessoa1.Nome); // Imprime Maria

Resumo

  • Use Structs para objetos pequenos, imutáveis e temporários.
  • Use Classes para objetos complexos, persistentes e compartilhados.

Entender a diferença entre Structs e Classes é essencial para escrever código eficiente e adequado às suas necessidades. Escolher a estrutura certa pode melhorar a performance e a legibilidade do seu programa.

Nenhum comentário:

Postar um comentário