Het belangrijkste verschil tussen klasse en struct is dat klasse een referentietype is, terwijl struct een waardetype is, en hun toewijzing in het geheugen verschilt.
Wat is klasse?
Klasse, een fundamenteel concept in objectgeoriënteerd programmeren, is een type aangepaste datastructuur die doorgaans velden, attributen, methoden, attributen, constructors, indexers, operatoren, enzovoort bevat. In .NET erven uiteindelijk alle klassen van de System.Object-klasse, dus ze zijn een referentietype, dat wil zeggen, wanneer je een instantie van een klasse kent, wordt het adres van die instantie in de beheerde heap opgeslagen op de stack, en de waarde van de instantie in de beheerde heap.
Wat is een struct?
Een struct is een waardetype dat wordt gebruikt om een verzameling gerelateerde variabelen te organiseren in één variabele entiteit. Alle structuren worden geërfd van de System.ValueType-klasse, dus ze zijn een waardetype, dat wil zeggen, de struct-instantie wordt aangemaakt op de stack waar de thread is toegewezen, en slaat de waarde zelf op. Dus bij het gebruik van struct kunnen we het behandelen als een basisklasse zoals int en char.
1. klasse is het referentietype, en structs is het waardetype
Aangezien klasse een referentietype is, kan klasse op nul worden gezet. Maar we kunnen struct niet nul maken omdat het een waardetype is.
2. Wanneer je een klasse instanzieerd, wordt deze op de heap aangemaakt. En je instantieert een struct, die op de stack wordt aangemaakt
3. Je gebruikt een referentie naar een klasse-instantie. En je gebruikt geen referentie naar een struct. (gebruik ze in plaats daarvan direct)
4. Wanneer we een klasse als argument naar een methode doorgeven, geven we een referentie door. struct geeft een waarde door, geen referentie.
5. structs kunnen geen initializers hebben, klassen kunnen initializers hebben.
6. Klassen kunnen duidelijke parameterloze constructors hebben, maar structs kunnen dat niet
7. Het nieuwe sleutelwoord moet worden geïnstantieerd voordat de klasse wordt gebruikt, en de Struct heeft het niet nodig
8. Klasse ondersteunt overerving en polymorfisme, Struct niet. Opmerking: Maar Struct kan interfaces implementeren net als klassen
9. Aangezien Struct geen overerving ondersteunt, kunnen haar leden niet worden aangepast met beschermde of beschermde interne
10. De constructor van Class hoeft niet alle velden te initialiseren, en de constructor van Struct moet alle velden initialiseren
11. Klasse kan een destructor definiëren, maar Struct kan dat niet
12. Klasse is geschikt voor grote en complexe data, en Struct is geschikt voor nieuwe types die vaak worden gebruikt als combinatie van bepaalde data.
Toepasselijke Gebeurtenissen: Struct heeft prestatievoordeel, en Class heeft objectgeoriënteerde extensie-voordelen.
Het type dat wordt gebruikt voor de onderliggende datastore is ontworpen als een Struct-type, en het type dat wordt gebruikt om applicatiegedrag te definiëren is ontworpen als een Klasse. Als je niet zeker bent van de toekomstige toepassing van het type, moet je Klasse gebruiken. |