Programavimas

Kaip dirbti su Struktūromis C #

Nors klasėje ir struktūroje yra daug panašumų, yra ir keletas ryškių skirtumų. Svarbiausia, kad struktūra, skirtingai nuo klasės, yra vertės tipas. Taigi, nors klasės egzemplioriai saugomi kaupe, struktūros egzemplioriai saugomi rietuvėje.

Kai struktūros egzempliorius perduodamas metodui, jis visada perduodamas pagal vertę. Tai skiriasi nuo to, kas nutinka, kai klasės egzempliorių perduodame metodui - egzempliorius perduodamas remiantis nuoroda.

Programavimo struktūros C #

Štai kaip atrodo struktūros deklaravimo sintaksė.

struktūros

{

// Struktūros duomenų nariai ir narių funkcijos

}

Šis kodo fragmentas parodo, kaip atrodo įprastas struktūros apibrėžimas.

struktūros stačiakampis

    {

public int plotis;

public int aukštis;

    }

Dabar galite priskirti reikšmes anksčiau apibrėžto struktūros nariams, kaip parodyta žemiau esančiame kodo fragmente.

Stačiakampis stačiakampis = naujas stačiakampis ();

stačiakampis.plotis = 10;

stačiakampis.aukštis = 15;

Pirmiau pateiktas kodo fragmentas sukuria stačiakampio struktūros egzempliorių ir priskiria reikšmes viešiems jo nariams. Atminkite, kad struktūroje galite turėti ir narių duomenis, ir metodus. Be to, galite nurodyti narius kaip privačius, viešuosius ir vidinius. Reikėtų pažymėti, kad skirtingai nuo klasių, jūs negalite turėti laukų inicializatorių netiesiniams laukams struktūrose. Taigi tokie teiginiai, kaip nurodyta toliau, nėra tinkami.

int plotis = 10;

int aukštis = 15;

Bet kokiu atveju galite inicijuoti statinius narius savo struktuose. Taigi šis yra galiojantis teiginys struktūros viduje.

statinis int plotas = 0;

Dabar pridėkime kelis metodus į struktūrą. Čia yra atnaujinta anksčiau sukurtos stačiakampio struktūros versija. Atkreipkite dėmesį į parametruojamo konstruktoriaus naudojimą.

struktūros stačiakampis

    {

int plotis;

int aukštis;

viešasis stačiakampis (int plotis, int aukštis)

        {

this.width = plotis;

tai.aukštis = aukštis;

        }

viešoji „GetArea“ ()

        {

grąžinkite šį.plotis * tai.aukštis;

        }

    }

Atminkite, kad net jei struktūra neleidžia apibrėžti aiškaus parametrų konstruktoriaus, struktūroje visada galite turėti parametrų konstruktorius. Be to, panašiai kaip klasėje, jūs taip pat galite perkrauti konstruktorius struktūroje. Štai kaip galite nustatyti reikšmes naudodami „Stačiakampio“ struktūros konstruktorių ir tada gauti sritį, pasitelkdami metodą „GetArea“ (). Reikėtų pažymėti, kad panašiai kaip klasėje, struktūroje galite turėti statinius ir nestatinius metodus.

static void Main (string [] args)

        {

Stačiakampis stačiakampis = naujas stačiakampis (10, 15);

int plotas = stačiakampis.GetArea ();

Console.WriteLine ("Plotas yra:" + plotas.ToString ());

Pultas.Skaitykite ();

        }

Kaip ir klasėje, „Struct“ palaiko ypatybes ir indeksuotojus. Vienas esminis skirtumas tarp struktūros ir klasės yra tas, kad skirtingai nei klasėje, struktūra nepalaiko paveldėjimo - jūs negalite turėti struktūros, pratęsiančios kitą klasę, ar struktūros. Tačiau, panašiai kaip klasėje, „Struct“ gali įdiegti sąsają. Tai iliustruojantis kodo pavyzdys.

sąsaja IR stačiakampis

    {

int „GetArea“ ();

    }

struktūros stačiakampis: IR stačiakampis

    {

int plotis;

int aukštis;

viešasis stačiakampis (int plotis, int aukštis)

        {

this.width = plotis;

tai.aukštis = aukštis;

        }

viešoji „GetArea“ ()

        {

grąžinkite šį.plotis * tai.aukštis;

        }

    }

Pasirinkimas tarp klasės ir struktūros

Dabar mes prieiname įdomų diskusijų tašką. Kada turėtume naudoti struktūrą klasėje ir atvirkščiai?

Kaip jau aptarėme anksčiau šiame straipsnyje, struktūros egzempliorius sukuriamas rietuvėje, o klasės egzempliorius - valdomame kaupe. Vertės tipų paskirstymas ir paskirstymas yra pigesnis nei pamatinių tipų. Struktūra yra geras pasirinkimas, kai reikia sukurti sudėtinį duomenų tipą, kuriame būtų keli duomenų nariai. Idealiu atveju struktūros duomenų narių dydis turėtų būti mažesnis nei 16 baitų. Galite pasirinkti struktūrą, kai norite sukurti mažą sudėtinę duomenų struktūrą, turinčią vertės semantiką ir turinčią tik kelis duomenų narius. Tokiais atvejais naudodami struktūrą galite išvengti pridėtinių išlaidų, susijusių su šiukšlių surinkimu.

Turėtumėte laikytis rekomenduojamos geriausios praktikos dirbdami su struktais. Turėtumėte vengti naudoti didesnio dydžio struktūrą nei rekomenduojama šiame straipsnyje. Be to, atkreipkite dėmesį, kad struktų egzempliorių perdavimas metodams yra brangesnis, palyginti su klasių egzemplioriais. Patartina naudoti struktūras, kai dirbate su mažomis duomenų struktūromis. Daugiau apie šią temą galite sužinoti iš šio MSDN straipsnio.

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