Kõige olulisem erinevus klassi ja struktuuri vahel on see, et klass on viitetüüp, samas kui struktuur on väärtustüüp ning nende jaotus mälus on erinev.
Mis on tund?
Klass, objektorienteeritud programmeerimise põhikontseptsioon, on kohandatud andmestruktuuri tüüp, mis tavaliselt sisaldab välju, atribuute, meetodeid, atribuute, konstruktoreid, indekseerijaid, operaatoreid jne. .NET-is pärivad kõik klassid lõpuks System.Object klassist, seega on nad viitetüüp, st kui sa uuendad klassi eksemplari, salvestatakse selle eksemplari aadress hallatavas kuhjas virna ja eksemplari väärtus hallatud kuhjas.
Mis on struct?
Struktuur on väärtustüüp, mida kasutatakse seotud muutujate kogumi organiseerimiseks üheks muutujateks. Kõik struktuurid pärinevad System.ValueType klassist, seega on need väärtustüüp, st struktuuri eksemplar luuakse virnale, kuhu lõim määratakse, ja see salvestab väärtuse ennast. Seega, kui kasutame struct'i, saame seda käsitleda kui põhilist tüüpi klassi, nagu int ja char.
1. klass on viitetüüp ja struktuurid on väärtustüüp
Kuna klass on viitetüüp, saab klassi seada nulliks. Aga me ei saa strukturi nulliks teha, sest see on väärtustüüp.
2. Kui sa instantsieerid klassi, luuakse see hunnikule. Ja sa instanseerid struktuuri, mis luuakse virnal
3. Sa kasutad viidet klassi instantsile. Ja sa ei kasuta viidet struktuurile. (kasuta neid otse)
4. Kui me anname klassi argumendina meetodile, anname edasi viite. struktuur edastab väärtuse, mitte viite.
5. Struktuuridel ei tohi olla initsialiseerijaid, klassidel võib olla initsialiseerijad.
6. Klassidel võivad olla ilmsed parameetrivabad konstruktorid, kuid struktuuridel mitte.
7. Uus märksõna tuleb enne klassi kasutamist instantsierida ja Struct ei vaja seda
8. Klass toetab pärilikkust ja polümorfismi, Struct mitte. Märkus: Aga Struct suudab rakendada liideseid samamoodi nagu klasse
9. Kuna Struct ei toeta pärilikkust, ei saa selle liikmeid muuta kaitstud või kaitstud sisemise süsteemiga
10. Klassi konstruktor ei pea initsialiseerima kõiki välju ning Structi konstruktor peab initsialiseerima kõik väljad
11. Klass võib defineerida hävitajat, kuid struktuur ei saa
12. Klass sobib suurte ja keerukate andmete jaoks ning Struct sobib uute tüüpide jaoks, mida sageli kasutatakse mõne andmete kombinatsioonina.
Rakendatavad juhtumid: Structil on jõudluseelised ja Classil objektorienteeritud laienduse eelised.
Aluseks oleva andmehoidla tüüp on kujundatud Struct-tüübina ning rakenduse käitumise määratlemiseks kasutatav tüüp on loodud klassina. Kui sa pole kindel selle tüübi tulevases rakenduses, peaksid kasutama Classi. |