Ohjelmointi

Kuinka työskennellä C #: n rakenteiden kanssa

Vaikka luokan ja rakenteen välillä on paljon yhtäläisyyksiä, on myös joitain selkeitä eroja. Tärkeintä on, että rakenne, toisin kuin luokka, on arvotyyppi. Joten, kun luokan esiintymät tallennetaan kasaan, strukturien esiintymät tallennetaan pinoon.

Kun struktumin esiintymä välitetään menetelmälle, se välitetään aina arvon mukaan. Tämä on päinvastoin kuin mitä tapahtuu, kun välitämme luokan instanssin menetelmälle - ilmentymä välitetään viitteenä.

Ohjelmointirakenteet C #

Näin näyttää rakenteiden ilmoittamisen syntaksin.

rakenne

{

// Datan jäsenet ja jäsentoiminnot strukturissa

}

Seuraava koodinpätkä näyttää, miltä tyypillinen rakennemääritelmä näyttää.

struct Suorakulmio

    {

julkisen int leveys;

julkisen sisäkorkeus;

    }

Voit nyt määrittää arvoja aiemmin määrittämäsi rakenteen jäsenille alla olevan koodinpätkän mukaisesti.

Suorakulmion suorakulmio = uusi Suorakulmio ();

suorakulmio. leveys = 10;

suorakulmio. korkeus = 15;

Yllä oleva koodinpätkä luo suorakulmiorakenteen ilmentymän ja määrittää arvot sen julkisille jäsenille. Huomaa, että strukturissa voi olla sekä jäsentietoja että menetelmiä. Voit myös määrittää jäsenet yksityisiksi, julkisiksi ja sisäisiksi. On huomattava, että toisin kuin luokissa, et voi olla kenttien alustusohjelmia ei-staattisille kentille rakenteissa. Tästä syystä seuraavanlaiset lausekkeet rakenteessa eivät ole kelvollisia.

int leveys = 10;

int korkeus = 15;

Voit joka tapauksessa alustaa staattiset jäsenet rakenteissasi. Siksi seuraava on kelvollinen käsky strukturissa.

staattinen int-alue = 0;

Lisätään nyt muutama menetelmä strukturiin. Tässä on aiemmin luomamme suorakulmion rakenteen päivitetty versio. Huomaa parametrisoidun konstruktorin käyttö.

struct Suorakulmio

    {

int leveys;

int korkeus;

julkinen suorakulmio (int leveys, int korkeus)

        {

this.width = leveys;

tämä.korkeus = korkeus;

        }

julkinen int GetArea ()

        {

palauta tämä.leveys * tämä.korkeus;

        }

    }

Huomaa, että vaikka rakenne ei salli sinun määritellä nimenomaista parametrittomia konstruktoreita sen sisällä, parametrirakentajat voivat aina olla rakenteen sisällä. Samoin kuin luokassa, myös strukturissa voi olla ylikuormitettuja rakentajia. Näin voit asettaa arvoja suorakulmion rakenteen rakentajalla ja saada sitten alueen kutsumalla GetArea () -menetelmää. On huomattava, että samanlainen kuin luokka, strukturissa voi olla staattisia ja ei-staattisia menetelmiä.

staattinen void Main (merkkijono [] args)

        {

Suorakulmion suorakulmio = uusi suorakulmio (10, 15);

int-alue = suorakulmio.GetArea ();

Console.WriteLine ("Alue on:" + alue.ToString ());

Konsoli.Lue ();

        }

Sarjan tavoin rakenne tarjoaa tukea ominaisuuksille ja indeksoijille. Yksi merkittävä ero strukturin ja luokan välillä on, että toisin kuin luokassa, rakenne ei tue perintöä - sinulla ei voi olla rakennetta, joka laajentaa toista luokkaa tai rakennetta. Luokan tavoin rakenne voi kuitenkin toteuttaa käyttöliittymän. Tässä on esimerkki koodista, joka kuvaa tätä.

liitäntä IR suorakulmio

    {

int GetArea ();

    }

struct Suorakulmio: IR suorakulmio

    {

int leveys;

int korkeus;

julkinen suorakulmio (int leveys, int korkeus)

        {

this.width = leveys;

tämä.korkeus = korkeus;

        }

julkinen int GetArea ()

        {

palauta tämä.leveys * tämä.korkeus;

        }

    }

Luokan ja rakenteen välillä valitseminen

Nyt olemme päässeet mielenkiintoiseen keskustelupisteeseen. Milloin meidän tulisi käyttää rakennetta luokan yli ja päinvastoin?

Kuten aiemmin tässä artikkelissa keskustelimme, pinoan luodaan strukturointiesimerkki, kun taas hallittuun kasaan luodaan luokan ilmentymä. Arvotyyppien allokointi ja jakaminen ovat halvempia kuin viitetyypit. Rakenne on hyvä valinta, kun sinun on luotava yhdistetty tietotyyppi, johon mahtuisi muutama tietojäsen. Ihannetapauksessa rakenteen datajäsenten koon tulisi olla alle 16 tavua. Voit valita rakenteen, kun haluat rakentaa pienen yhdistetyn tietorakenteen, jolla on arvosemantiikka ja joka sisältää vain muutaman datajäsenen. Kun käytät strukturointia tällaisissa tapauksissa, voit välttää roskien keräämiseen liittyviä yleiskustannuksia.

Noudata suositeltuja parhaita käytäntöjä työskennellessäsi rakenteiden kanssa. Älä käytä rakenteita, jotka ovat kooltaan suurempia kuin mitä tässä artikkelissa suositellaan. Huomaa myös, että rakenteiden esiintymien välittäminen menetelmille on suorituskyvyltään kalliimpaa kuin luokkien esiintymien välittäminen. On suositeltavaa käyttää rakenteita, kun työskentelet pienten tietorakenteiden kanssa.Voit oppia lisää tästä aiheesta tästä MSDN-artikkelista.

$config[zx-auto] not found$config[zx-overlay] not found