A legfontosabb különbség az osztály és a struktur között, hogy az osztály referenciatípus, míg a strukturált értéktípus, és a memóriában eloszlásuk eltérő.
Mi az az osztály?
Az osztály, amely az objektumorientált programozás alapvető fogalma, egy egyedi adatszerkezet, amely általában mezőket, attribútumokat, metódusokat, attribútumokat, konstruktorokat, indexelőket, operátorokat stb. tartalmaz. A .NET-ben minden osztály végül a System.Object osztályból örököl, tehát referenciatípus, vagyis amikor új példányt adsz egy osztályból, az adott példány címe a kezelt halomban tárolódik a veremben, és az érték a kezelt halomban van.
Mi az a szerkezet?
A szerkezet egy értéktípus, amelyet egy kapcsolódó változóhalmazba szerveznek egyetlen változós entitásba. Minden struktúra a System.ValueType osztályból örököl, így értéktípus, vagyis a szerkezeti példány azon a veremben jön létre, ahol a szál van hozzárendelve, és maga az érték tárolja. Tehát struct használatakor kezelhetjük alap típusosztályként, mint például int és char.
1. az osztály a referenciatípus, a szerkezetek pedig az értéktípus
Mivel az osztály referenciatípus, az osztály nullra állítható. De nem tehetjük a structot nullná, mert értéktípus.
2. Amikor egy osztályt instanciálsz, az a halmazon jön létre. És létrehozol egy structuszt, amit a stacken hoznak létre
3. Egy osztálypéldányra hivatkozva használsz. És nem használsz egy szerkezetre utalást. (inkább közvetlenül használd őket)
4. Amikor az osztályt egy metódus érveként adjuk át, akkor utalást adunk. A struct értéket ad át, nem referenciaként.
5. A szerkezeteknek nem lehetnek inicializálók, az osztályoknak is lehetnek inicializátorok.
6. Az osztályoknak lehetnek nyilvánvaló paraméter nélküli konstruktorok, de a szerkezeteknek nem
7. Az új kulcsszót meg kell instanálni, mielőtt az osztályt használnánk, és a Structnek nincs rá szüksége
8. Az osztály támogatja az öröklődést és a polimorfizmust, a Struct nem. Megjegyzés: De a Struct képes interfészeket is megvalósítani, akárcsak az osztályokat
9. Mivel a Struct nem támogatja az öröklést is, tagjai nem módosíthatók védett vagy védett belső funkcióval
10. Az osztály konstruktorának nem kell minden mezőt inicializálnia, és a Struct konstruktorának minden mezőt inicializálnia kell
11. Az osztály definiálhatja a pusztítót, de a szerkezet nem
12. Az osztály alkalmas nagy és összetett adatokhoz, míg a Struct új típusokhoz, amelyeket gyakran egyes adatok kombinációjaként használnak.
Alkalmazható alkalmak: A szerkezetnek teljesítményelőnyei vannak, a Classnak pedig objektumorientált kiterjesztési előnyei.
Az alapul szolgáló adattároló típusa Struct típusként van tervezve, az alkalmazás viselkedésének meghatározásához használt típus pedig osztályként van tervezve. Ha nem vagy biztos a típus jövőbeli alkalmazásában, használd a Class-t. |