Publicado em

struct em C#

Partilhar:

Introdução

A linguagem C# é rica em tipos, oferecendo aos programadores uma ampla variedade de ferramentas para resolver problemas. Entre essas ferramentas estão as estruturas (structs), que são especialmente úteis para representar objetos leves que possuem uma semântica de valor.

O que é uma estrutura (struct)?

No C#, uma struct é um tipo de valor que é utilizado para encapsular pequenas quantidades de dados relacionados. Devido à sua natureza de tipo de valor, ocupa diretamente um espaço na memória, evitando a alocação no heap, o que a torna mais rápida em certas circunstâncias em comparação com as classes.

Estruturas vs Classes

Diferenças entre structs e classes:

  1. Tipo de Atribuição: Enquanto uma struct é um tipo de valor, uma classe é um tipo de referência. Essa diferença fundamental dita o comportamento em várias operações, especialmente na atribuição e passagem de parâmetros.
  2. Herança: As structs não suportam herança, exceto a herança de interfaces.
  3. Construtores: Uma struct não pode ter um construtor vazio. No entanto, pode ter construtores parametrizados.
  4. Destrutores: As structs não podem ter destrutores. Destrutores são usados em classes para realizar qualquer limpeza necessária antes que um objeto seja coletado pelo coletor de lixo.
  5. Modificadores de acesso: O modificador protected não faz sentido em uma struct, visto que não suportam herança.

Quando usar uma struct?

As structs são ideais em situações onde:

  • A instância é pequena e possui uma semântica de valor.
  • É desejável evitar alocações no heap.
  • O objeto representa um único valor lógico, como um número ou ponto de dados.

Exemplo Prático

Aqui está um exemplo de uma struct em ação:

using System;

namespace Base {
  class Struct {
    public void Run() {
      var estrutura = new Estrutura();
      estrutura.Numero = 200;

      // O número precisa de ser >= 0 e <= 100.
    }
  }

  struct Estrutura : INumero {
    private int numero;

    public int Numero {
      set {
        if (value >= 0 && value <= 100) {
          numero = value;
          ImprimirNumero();
        }
        else
          Console.WriteLine("O número precisa de ser >= 0 e <= 100.");
      }
    }

    public void ImprimirNumero() {
      Console.WriteLine($"Número: {numero}");
    }
  }

  interface INumero {
    void ImprimirNumero();
  }
}

Conclusão

A escolha entre usar uma struct ou classe em C# depende das necessidades específicas do seu projeto. Esperamos que com este artigo você tenha adquirido uma compreensão clara das estruturas e quando elas podem ser úteis.

Happy coding!