Vai al contenuto principale
Pubblicato il

struct in C#

Condividi:

Introduzione

Il linguaggio C# è ricco di tipi, offrendo ai programmatori un'ampia varietà di strumenti per risolvere i problemi. Tra questi strumenti ci sono le strutture (structs), particolarmente utili per rappresentare oggetti leggeri che hanno una semantica di valore.

Cos'è una struttura (struct)?

In C#, una struct è un tipo di valore utilizzato per incapsulare piccole quantità di dati correlati. Grazie alla sua natura di tipo di valore, occupa direttamente spazio in memoria, evitando l'allocazione nell'heap, il che la rende più veloce in certe circostanze rispetto alle classi.

Strutture vs Classi

Differenze tra structs e classi:

  1. Tipo di Assegnazione: Mentre una struct è un tipo di valore, una classe è un tipo di riferimento. Questa differenza fondamentale determina il comportamento in varie operazioni, specialmente nell'assegnazione e nel passaggio di parametri.
  2. Ereditarietà: Le structs non supportano l'ereditarietà, ad eccezione dell'ereditarietà da interfacce.
  3. Costruttori: Una struct non può avere un costruttore senza parametri. Tuttavia, può avere costruttori parametrizzati.
  4. Distruttori: Le structs non possono avere distruttori. I distruttori vengono utilizzati nelle classi per eseguire qualsiasi pulizia necessaria prima che un oggetto venga raccolto dal garbage collector.
  5. Modificatori di accesso: Il modificatore protected non ha senso in una struct, poiché non supportano l'ereditarietà.

Quando usare una struct?

Le structs sono ideali nelle situazioni in cui:

  • L'istanza è piccola e ha una semantica di valore.
  • È preferibile evitare allocazioni nell'heap.
  • L'oggetto rappresenta un singolo valore logico, come un numero o un punto dati.

Esempio Pratico

Ecco un esempio di una struct in azione:

using System;

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

      // Il numero deve essere >= 0 e <= 100.
    }
  }

  struct Struttura : INumero {
    private int numero;

    public int Numero {
      set {
        if (value >= 0 && value <= 100) {
          numero = value;
          StampaNumero();
        }
        else
          Console.WriteLine("Il numero deve essere >= 0 e <= 100.");
      }
    }

    public void StampaNumero() {
      Console.WriteLine($"Numero: {numero}");
    }
  }

  interface INumero {
    void StampaNumero();
  }
}

Conclusione

La scelta tra usare una struct o una classe in C# dipende dalle esigenze specifiche del tuo progetto. Speriamo che con questo articolo tu abbia acquisito una comprensione chiara delle strutture e di quando possono essere utili.

Happy coding!