La differenza più essenziale tra class e struct è che class è un tipo di riferimento, mentre struct è un tipo value, e la loro allocazione in memoria è diversa.
Cos'è la classe?
La classe, un concetto fondamentale nella programmazione orientata agli oggetti, è un tipo di struttura dati personalizzata che tipicamente contiene campi, attributi, metodi, attributi, costruttori, indicizzatori, operatori, ecc. In .NET, tutte le classi ereditano alla fine dalla classe System.Object, quindi sono un tipo di riferimento, cioè, quando si ha un'istanza di una classe, l'indirizzo di quell'istanza nell'heap gestito viene memorizzato sullo stack, e il valore dell'istanza è memorizzato nell'heap gestito.
Cos'è una struct?
Una struct è un tipo di valore utilizzato per organizzare un insieme di variabili correlate in un'unica entità variabile. Tutte le strutture sono ereditate dalla classe System.ValueType, quindi sono un tipo di valore, cioè l'istanza della struct viene creata sullo stack dove viene assegnato il thread e memorizza il valore stesso. Quindi, quando si usa struct, possiamo considerarlo come una classe di tipo base come int e char.
1. la classe è il tipo di riferimento, e structs è il tipo di valore
Poiché la classe è un tipo di riferimento, la classe può essere impostata come nullo. Ma non possiamo rendere struct null perché è un tipo value.
2. Quando istianzi una classe, essa verrà creata sull'heap. E si ististanzia una struct, che verrà creata sulla pila
3. Stai usando un riferimento a un'istanza di classe. E non stai usando un riferimento a una struct. (usali invece direttamente)
4. Quando passiamo class come argomento a un metodo, passiamo un riferimento. Struct passa un valore, non un riferimento.
5. Le struct non possono avere inizializzatori, le classi possono avere inizializzatori.
6. Le classi possono avere costruttori ovvi senza parametri, ma le Struct non possono
7. La nuova parola chiave deve essere istanziata prima che la classe venga utilizzata, e la Struct non ne ha bisogno
8. La classe supporta ereditarietà e polimorfismo, Struct no. Nota: Ma Struct può implementare interfacce proprio come le classi
9. Poiché Struct non supporta l'ereditariedade, i suoi membri non possono essere modificati con Internal protetto o protetto
10. Il costruttore di Class non deve inizializzare tutti i campi, e il costruttore di Struct deve inizializzare tutti i campi
11. La classe può definire un distruttore, ma Struct non può
12. La classe è adatta a dati grandi e complessi, e Struct è adatta a nuovi tipi spesso utilizzati come combinazione di alcuni dati.
Occasioni applicabili: Struct offre vantaggi prestazionali, e Class ha vantaggi di estensione orientata agli oggetti.
Il tipo utilizzato per lo store dati sottostante è progettato come un tipo Struct, mentre il tipo usato per definire il comportamento dell'applicazione è progettato come una Classe. Se non sei sicuro dell'applicazione futura del tipo, dovresti usare Class. |