See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 22710|Vastuse: 0

[Allikas] Erinevus struktuuri ja klassi vahel C#-s

[Kopeeri link]
Postitatud 24.06.2016 11:53:06 | | |
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.




Eelmine:Alipay RSA privaatvõti ja avaliku võtme ühe klõpsuga genereerimise tööriist
Järgmine:C# pööra MySQL abiklass tagasi, salvesta see
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com