Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 22710|Antwoord: 0

[Bron] Het verschil tussen struct en class in C#

[Link kopiëren]
Geplaatst op 24-06-2016 11:53:06 | | |
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.




Vorig:Alipay RSA private key en publieke sleutel tool voor één-klik generatie
Volgend:C# reverse een MySQL helpclass maken, sla die op
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com