Condividi tramite


Strutture (Guida per programmatori C#)

Per la definizione delle strutture viene utilizzata la parola chiave struct, ad esempio:

public struct PostalAddress
{
    // Fields, properties, methods and events go here...
}

Condividono quasi tutte la stessa sintassi delle classi, sebbene le prime siano più limitate rispetto alle seconde:

  • All'interno di una dichiarazione di struttura, i campi non possono essere inizializzati se non sono stati dichiarati come const o static.

  • In una struttura è possibile non dichiarare un costruttore predefinito, ovvero un costruttore senza parametri, o un distruttore.

Il compilatore crea ed elimina automaticamente in modo permanente copie delle strutture, pertanto non è necessario disporre di costruttori e distruttori predefiniti. Il compilatore implementa infatti il costruttore predefinito assegnando tutti i campi dei valori predefiniti. Vedere Tabella dei valori predefiniti. Le strutture non possono ereditare da classi o da altre strutture.

Le strutture sono tipi di valori. Quando un oggetto viene creato da una struttura e assegnato a una variabile, la variabile contiene l'intero valore della struttura. Quando si copia una variabile che contiene una struttura, vengono copiati tutti i dati, pertanto le eventuali modifiche apportate alla nuova copia non vengono applicate ai dati contenuti nella copia precedente. Poiché le strutture non utilizzano riferimenti, non possiedono un'identità. Non è quindi possibile distinguere tra due istanze di un tipo di valore con gli stessi dati. In C# tutti i tipi di valore derivano implicitamente da ValueType, che eredita da Object.

Il compilatore può convertire i tipi di valore in tipi di riferimento in un processo noto come boxing. Per ulteriori informazioni, vedere Boxing e unboxing.

Cenni preliminari sulle strutture

Di seguito sono riportate le caratteristiche principali delle strutture:

  • Le strutture sono tipi di valore, mentre le classi sono tipi di riferimento.

  • A differenza delle classi, è possibile creare istanze di strutture senza utilizzare l'operatore new.

  • Le strutture possono dichiarare costruttori, ma i costruttori richiedono parametri.

  • Una struttura non può ereditare da un'altra struttura o da un'altra classe né può costituire la base di una classe. Tutte le strutture ereditano direttamente da System.ValueType, che eredita da System.Object.

  • Una struttura può implementare interfacce.

Sezioni correlate

Ulteriori informazioni:

Vedere anche

Riferimenti

Oggetti, classi e strutture (Guida per programmatori C#)

Concetti

Guida per programmatori C#
Progettazione di strutture
Classi (Guida per programmatori C#)