Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 22710|Risposta: 0

[Fonte] La differenza tra struct e classe in C#

[Copiato link]
Pubblicato su 24/06/2016 11:53:06 | | |
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.




Precedente:Strumento di generazione con chiave privata e chiave pubblica Alipay RSA
Prossimo:C# inverti una classe di aiuto MySQL, salvala
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com