Programavimas

Kaip dirbti su indeksavimo rodikliais C #

C # programavimo kalba yra indeksavimo palaikymas - funkcija, leidžianti naudoti objektą kaip masyvą. Indeksatoriai taip pat žinomi kaip išmanieji masyvai ir juos galima apibrėžti panašiai kaip apibrėžta nuosavybė. MSDN teigia: "Indeksatoriai leidžia indeksuoti klasės ar struktūros egzempliorius, kaip ir masyvai. Indeksatoriai panašūs į ypatybes, išskyrus tai, kad jų prieigos priima parametrus."

Nors indeksatoriai ir savybės turi panašumų ne vienu, bet tarp jų yra subtilių skirtumų. Skirtingai nuo savybių, prie indeksavimo priemonės galite prisijungti naudodami indeksus. Atminkite, kad turite pasiekti nuosavybę naudodami jos pavadinimą. Be to, indeksuotojai yra klasės nariai, todėl jie negali būti statiški. Galite turėti ir statinių, ir nestatinių savybių.

Šis kodo fragmentas iliustruoja, kaip deklaruojamas indeksuotojas:

šis [argumentų sąrašas]

{

gauti

  {

  }

Nustatyti

  {

  }

}

Atminkite, kad modifikatorius, kaip parodyta indeksavimo priemonės sintaksės deklaracijoje, gali būti privatus, viešas, apsaugotas arba vidinis.

Apsvarstykite šią klasę:

viešoji klasė Kontaktai

    {

privati ​​eilutė [] adresas = nauja eilutė [3];

vieša eilutė tai [int index]

        {

gauti

            {

grįžimo adresas [rodyklė];

            }

rinkinys

            {

adresas [rodyklė] = vertė;

            }

        }

    }

Kontaktų klasėje yra privatus narys, pavadintas adresu, ir apibrėžia indeksuotoją. Adreso narys yra tipo eilutės masyvas. Štai kaip galite sukurti „Contact“ klasės egzempliorių ir naudoti indeksavimo priemonę.

Kontaktinis kontaktas = naujas kontaktas ();

kontaktas [0] = "Begumpet";

kontaktas [1] = "Hyderabad";

kontaktas [2] = "Telengana";

už (int i = 0; i <3; i ++)

Console.WriteLine (susisiekite [i]);

Reikėtų pažymėti, kad norint apibrėžti indeksuotojus, reikia naudoti raktinį žodį „šis“. Atkreipkite dėmesį, kad jūs negalite naudoti tik sveikųjų skaičių kaip indeksų, kad galėtumėte pasiekti indeksuotojus - galite naudoti ir kitus paieškos mechanizmus. Indeksatorius paprastai naudojamas, kai jūsų klasė atstovauja kolekcijai ar objektams. Tada naudodami indeksavimo priemonę galite pasiekti konkretų elementą naudodami indeksą.

Pabandykime pavyzdį. Apsvarstykite šią klasę, pavadintą Klientas.

viešosios klasės Klientas

    {

viešas užsakymų sąrašas

        {

gauti; rinkinys;

        }

viešas Užsisakykite šį [int orderID]

        {

gauti

            {

grįžti (iš o užsakymuose

kur o.OrderID == orderID

pasirinkite o) .Pirma ();

            }

        }

    }

Klientų klasė apibrėžia indekso tipą Užsakymas. Jame taip pat yra viešoji nuosavybė, kuri yra „Order“ tipo sąrašas. Čia yra jūsų užsakymo klasė.

visuomenės klasės įsakymas

    {

public int OrderID

        {

gauti; rinkinys;

        }

    }

Šis kodo fragmentas parodo, kaip galite pasiekti klientų klasės indeksavimo priemonę, norėdami gauti tam tikrą užsakymą.

   Sąrašas lstOrder = naujas sąrašas ();

Užsakymas o1 = nauja tvarka ();

o1.Užsakymo ID = 1;

Užsakymas o2 = nauja tvarka ();

o2.Užsakymo ID = 2;

lstOrder.Add (o1);

lstOrder.Add (o2);

Kliento klientas = naujas klientas ();

klientas.Uzsakymai = lstOrder;

Užsakymas o = klientas [1];

Žr. Aukščiau pateiktą kodo fragmentą. Atkreipkite dėmesį, kaip buvo sukurtas bendras „Order“ tipo sąrašas ir priskirtas Klientų klasės egzemplioriaus ypatybei „Užsakymai“. Tada tiesiog perduodate „OrderId“ kaip parametrą, kad gautumėte konkretų užsakymo egzempliorių.

Indeksatoriai palaiko paveldėjimą, gali būti polimorfiški ir abstraktūs. Apsvarstykite šią klasę, apibrėžiančią indeksavimo priemonę, kuri yra virtuali. „ContactBase“ klasė yra modifikuota „Contact“ klasės versija, kurią aptarėme anksčiau šiame straipsnyje.

viešosios klasės „ContactBase“

    {

saugoma eilutė [] adresas = nauja eilutė [3];

vieša virtuali eilutė tai [int index]

        {

gauti

            {

grįžimo adresas [rodyklė];

            }

rinkinys

            {

adresas [rodyklė] = vertė;

            }

        }

    }

Dabar galite gauti klasę iš „ContactBase“ klasės ir nepaisyti indeksavimo priemonės, kaip parodyta žemiau.

viešoji klasė „ConcreteContact“: „ContactBase“

    {

public overrign string [int index]

        {

gauti

            {

grįžimo adresas [rodyklė];

            }

rinkinys

            {

adresas [rodyklė] = vertė;

            }

        }

    }

Taigi, aukščiau pateiktame kodo pavyzdyje mes ištyrėme, kaip indeksuotojus galima naudoti paveldint tipus ir kaip jie gali parodyti polimorfinį elgesį.

Jūs taip pat galite tiksliai apibrėžti indeksuotoją kaip abstraktų. Norėdami tai padaryti, turite sukurti abstrakčią klasę ir tada apibrėžti indeksavimo priemonę kaip abstrakčią jos viduje. Pakeiskime „ContactBase“ klasę ir apibrėžkime indeksatorių kaip abstraktų. Štai kaip modifikuota „ContactBase“ klasės versija dabar atrodys:

 viešoji abstrakčioji klasė „ContactBase“

    {

apsaugota eilutė [] adresas = nauja eilutė [3];

vieša abstrakti eilutė tai [int rodyklė]

        {

gauti; rinkinys;

        }

}

Šiaip nereikia keisti „ConcreteContact“ klasės. Dabar galite naudoti indeksavimo priemonę, kad priskirtumėte eilutės reikšmes „ConcreteContact“ klasės egzemplioriui, kaip parodyta žemiau.

„ConcreteContact“ kontaktas = naujas „ConcreteContact“ ();

kontaktas [0] = "Begumpet";

kontaktas [1] = "Hyderabad";

kontaktas [2] = "Telengana";