Programmēšana

Kā strādāt ar struktūrām C #

Kaut arī klasē un struktūrā ir daudz līdzību, ir arī dažas atšķirīgas atšķirības. Vissvarīgākais ir tas, ka struktūra atšķirībā no klases ir vērtības tips. Tātad, kamēr klases gadījumi tiek glabāti kaudzē, struktūras gadījumi tiek glabāti kaudzē.

Kad struktūras gadījums tiek nodots metodei, tas vienmēr tiek nodots pēc vērtības. Tas ir pretstatā tam, kas notiek, kad klases eksemplāru nododam metodei - eksemplārs tiek nodots ar atsauci.

Programmēšanas raksti C #

Lūk, kā izskatās struktūras deklarēšanas sintakse.

struktur

{

// Struktūras datu dalībnieki un dalībnieku funkcijas

}

Šis koda fragments parāda, kā izskatās tipiska struktūras definīcija.

struktūras taisnstūris

    {

public int platums;

public int augstums;

    }

Tagad varat piešķirt vērtības iepriekš definētās struktūras dalībniekiem, kā parādīts zemāk esošajā koda fragmentā.

Taisnstūra taisnstūris = jauns Taisnstūris ();

taisnstūris.platums = 10;

taisnstūris.augums = 15;

Iepriekš minētais koda fragments izveido Taisnstūra struktūras gadījumu un piešķir vērtības tā publiskajiem dalībniekiem. Ņemiet vērā, ka struktūrā var būt gan biedru dati, gan metodes. Varat arī norādīt dalībniekus kā privātus, publiskus un iekšējus. Jāatzīmē, ka atšķirībā no klasēm laukos nevar būt inicializētāji nestatiskiem laukiem. Tādējādi tādi apgalvojumi kā struktūrā ir šādi, nav derīgi.

int platums = 10;

int augstums = 15;

Jebkurā gadījumā jūs varat inicializēt statiskos locekļus savās struktūrās. Tādējādi šis ir derīgs paziņojums struktūras iekšienē.

statiskā int platība = 0;

Tagad pievienosim struktūrai dažas metodes. Šeit ir iepriekš izveidotās taisnstūra struktūras atjauninātā versija. Ievērojiet parametrizētā konstruktora lietojumu.

struktūras taisnstūris

    {

int platums;

int augstums;

publiskais taisnstūris (int platums, int augstums)

        {

this.width = platums;

tas.augums = augstums;

        }

public int GetArea ()

        {

atgriezt this.width * this.height;

        }

    }

Ņemiet vērā, ka pat tad, ja struktūra neļauj definēt skaidru bezparametru konstruktoru tā iekšienē, struktūrā vienmēr var būt parametru konstruktori. Tāpat, līdzīgi kā klasē, arī struktūrā var būt pārslogoti konstruktori. Lūk, kā jūs varat iestatīt vērtības, izmantojot Taisnstūra struktūras konstruktoru, un pēc tam iegūt apgabalu, izmantojot metodi GetArea (). Jāatzīmē, ka līdzīgi kā klasē struktūras iekšpusē var būt statiskas un nestatiskas metodes.

static void Main (virkne [] args)

        {

Taisnstūra taisnstūris = jauns Taisnstūris (10, 15);

int apgabals = taisnstūris. GetArea ();

Console.WriteLine ("Platība ir:" + apgabals.ToString ());

Konsole. Lasīt ();

        }

Tāpat kā klase, arī struktūra nodrošina atbalstu īpašībām un indeksētājiem. Viena būtiska atšķirība starp struktūru un klasi ir tāda, ka atšķirībā no klases struktūra neatbalsta mantojumu - jums nevar būt struktūras, kas paplašina citu klasi vai struktūru. Tomēr līdzīgi kā klase, struktūra var ieviest saskarni. Šeit ir koda piemērs, kas to ilustrē.

interfeiss IR taisnstūris

    {

int GetArea ();

    }

struktūras taisnstūris: IR taisnstūris

    {

int platums;

int augstums;

publiskais taisnstūris (int platums, int augstums)

        {

this.width = platums;

tas.augums = augstums;

        }

public int GetArea ()

        {

atgriezt this.width * this.height;

        }

    }

Izvēle starp klasi un struktūru

Tagad mēs esam nonākuši pie interesanta debašu punkta. Kad mums vajadzētu izmantot struktūru klasē un otrādi?

Kā mēs iepriekš apspriedām šajā rakstā, struktūrā tiek izveidots eksemplārs, bet pārvaldītajā kaudzē tiek izveidots klases eksemplārs. Vērtības veidu piešķiršana un izvietošana ir lētāka nekā atsauces veidi. Struktūra ir laba izvēle, ja jāizveido salikts datu tips, kurā būtu daži datu dalībnieki. Ideālā gadījumā struktūras datu dalībnieku izmēram jābūt mazākam par 16 baitiem. Struktūru varat izvēlēties, ja vēlaties izveidot nelielu saliktu datu struktūru, kurai ir vērtību semantika un kurā ir tikai daži datu dalībnieki. Izmantojot struktūru šādos gadījumos, jūs varat izvairīties no papildu izmaksām, kas saistītas ar atkritumu savākšanu.

Strādājot ar struktūrām, jums jāievēro ieteiktā paraugprakse. Jums nevajadzētu izmantot struktūru, kas ir lielāka izmēra, nekā ieteicams šajā rakstā. Ņemiet vērā arī to, ka struktūru gadījumu nodošana metodēm veiktspējas ziņā ir dārgāka nekā klašu gadījumu nodošana. Strādājot ar mazām datu struktūrām, ieteicams izmantot struktūras. Vairāk par šo tēmu varat uzzināt šajā MSDN rakstā.

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