Olennaisin ero luokan ja rakenteen välillä on, että luokka on referenssityyppi, kun taas struct on arvotyyppi, ja niiden allokaatio muistissa on erilainen.
Mikä on luokka?
Luokka, joka on olio-ohjelmoinnin peruskäsite, on eräänlainen räätälöity tietorakenne, joka tyypillisesti sisältää kenttiä, attribuutteja, metodeja, attribuutteja, konstruktoreita, indeksoijia, operaattoreita jne. .NET:ssä kaikki luokat periytyvät lopulta System.Object-luokasta, joten ne ovat viitetyyppiä, eli kun uudistat luokan instanssin, kyseisen instanssin osoite hallitussa keossa tallennetaan pinoon ja instanssin arvo tallennetaan hallittuun heapiin.
Mikä on rakenne?
Rakenne on arvotyyppi, jota käytetään järjestämään joukko toisiinsa liittyviä muuttujia yhdeksi muuttujakokonaisuudeksi. Kaikki rakenteet periytyvät System.ValueType-luokasta, joten ne ovat arvotyyppiä, eli rakenne-instanssi luodaan pinoon, johon säie on määritetty, ja se tallentaa arvon itse. Joten kun käytämme structia, voimme käsitellä sitä perustyyppiluokkana, kuten int ja char.
1. luokka on referenssityyppi ja structs on arvotyyppi
Koska luokka on viitetyyppi, luokka voidaan asettaa nollaksi. Mutta emme voi tehdä structista nollaa, koska se on arvotyyppi.
2. Kun luot luokan, se luodaan kasaan. Ja luot rakenteen, joka luodaan pinossa
3. Käytät viittausta luokkainstanssiin. Et käytä viittausta rakenteeseen. (käytä niitä suoraan)
4. Kun annamme luokan argumenttina metodille, välitämme viitteen. Struct välittää arvon, ei viitteen.
5. Rakenteilla ei voi olla alustimia, luokilla voi olla alustuslaitteet.
6. Luokat voivat sisältää ilmeisiä parametrittomia konstruktoreita, mutta rakenteilla ei ole
7. Uusi avainsana täytyy instansoitua ennen luokan käyttöä, eikä rakenne sitä tarvitse
8. Luokka tukee periytymistä ja polymorfismia, Struct ei. Huomautus: Mutta Struct voi toteuttaa rajapintoja aivan kuten luokat
9. Koska Struct ei tue periytymistä, sen jäseniä ei voi muokata suojatulla tai suojatulla sisäisellä Sisäisellä
10. Luokan konstruktorin ei tarvitse aloittaa kaikkia kenttiä, ja Structin konstruktorin on alustettava kaikki kentät
11. Luokka voi määritellä tuhoajan, mutta Struct ei
12. Luokka sopii suurille ja monimutkaisille aineistoille, ja Struct sopii uusille tyypeille, joita usein käytetään yhdistelmänä jotakin dataa.
Sovellettavat tilanteet: Structilla on suorituskykyetuja, ja Classilla on oliopohjaisia laajennusetuja.
Taustalla olevan tietovaraston tyyppi suunnitellaan Struct-tyypiksi, ja sovelluksen käyttäytymisen määrittelytyyppi on luokanmuotoinen. Jos et ole varma tyypin tulevasta käytöstä, kannattaa käyttää Classia. |