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:
Procedura: differenza tra il passaggio a un metodo di una struttura e di un riferimento a una classe
Procedura: implementare conversioni tra strutture definite dall'utente
Vedere anche
Riferimenti
Oggetti, classi e strutture (Guida per programmatori C#)
Concetti
Guida per programmatori C#
Progettazione di strutture
Classi (Guida per programmatori C#)