Programiranje

Kako delati z indeksatorji v jeziku C #

Programski jezik C # vključuje podporo za indeksirnike - funkcijo, ki omogoča uporabo predmeta samo kot matrike. Indeksatorji so znani tudi kot pametna polja in jih je mogoče definirati podobno kot definira lastnost. MSDN navaja: "Indeksatorji omogočajo indeksiranje primerkov razreda ali strukture tako kot nizov. Indeksatorji so podobni lastnostim, le da njihovi dostopniki vzamejo parametre."

Čeprav imajo indeksatorji in lastnosti podobnosti v več pogledih, obstajajo med njimi subtilne razlike. Za razliko od lastnosti lahko do indeksatorja dostopate s pomočjo indeksov. Ne pozabite, da morate lastnost dostopati z uporabo njenega imena. Indeksatorji so tudi člani primerka razreda in zato ne morejo biti statični. Lahko imate tako statične kot nestatične lastnosti.

Naslednji delček kode ponazarja, kako je indeksator razglašen:

to [seznam argumentov]

{

dobili

  {

  }

Nastavite

  {

  }

}

Upoštevajte, da je modifikator, kot je prikazan v izjavi o sintaksi indeksatorja, lahko zaseben, javni, zaščiten ali notranji.

Upoštevajte naslednji razred:

javni razred Kontakt

    {

zasebni niz [] naslov = nov niz [3];

javni niz to [int indeks]

        {

dobili

            {

povratni naslov [kazalo];

            }

nastavite

            {

naslov [indeks] = vrednost;

            }

        }

    }

Razred Kontakt vsebuje zasebnega člana z imenom in določa indeksator. Naslovni član je polje tipa string. Tukaj je opisano, kako lahko ustvarite primerek razreda Kontakt in uporabite indeksator.

Kontaktni kontakt = nov Kontakt ();

kontakt [0] = "Begumpet";

kontakt [1] = "Hyderabad";

kontakt [2] = "Telengana";

za (int i = 0; i <3; i ++)

Console.WriteLine (stik [i]);

Upoštevati je treba, da morate za določanje indeksatorjev uporabiti ključno besedo "this". Upoštevajte, da za dostop do indeksatorjev niste omejeni na uporabo samo celih števil kot indeksov - lahko uporabite tudi druge mehanizme iskanja. Indeksator se običajno uporablja, kadar vaš razred predstavlja zbirko ali predmete. Nato lahko uporabite indeksator za dostop do določenega elementa s pomočjo indeksa.

Preizkusimo primer. Razmislite o naslednjem razredu z imenom Stranka.

kupec javnega razreda

    {

javni seznam naročil

        {

dobili; set;

        }

javno naroči to [int orderID]

        {

dobili

            {

vrnitev (od o v Nalogi

kjer je o.OrderID == id naročila

izberite o) .Prvi ();

            }

        }

    }

Razred Customer definira indeksator vrste Order. Vsebuje tudi javno lastnost, ki je seznam vrste Order. Tukaj je razred Naročilo za vašo referenco.

red javnega razreda

    {

javni int OrderID

        {

dobili; set;

        }

    }

Naslednji delček kode prikazuje, kako lahko dostopate do indeksatorja razreda Customer, da pridobite določeno naročilo.

   Seznam lstOrder = nov seznam ();

Naročilo o1 = novo Naročilo ();

o1.OrderID = 1;

Naročilo o2 = novo Naročilo ();

o2.OrderID = 2;

lstOrder.Add (o1);

lstOrder.Add (o2);

Stranka kupec = nova stranka ();

customer.Orders = lstOrder;

Naročilo o = kupec [1];

Glejte delček kode zgoraj. Upoštevajte, kako je bil ustvarjen generični seznam vrste Order in dodeljen lastnosti Orders primerka razreda Customer. Nato samo posredujete OrderId kot parameter za pridobivanje določenega primerka naročila.

Indeksatorji podpirajo dedovanje, lahko so polimorfni in lahko tudi abstraktni. Razmislite o naslednjem razredu, ki definira navidezni indeksator. Razred ContactBase je spremenjena različica razreda Contact, o katerem smo razpravljali prej v tem članku.

javni razred ContactBase

    {

zaščiteni niz [] naslov = nov niz [3];

javni navidezni niz to [int index]

        {

dobili

            {

povratni naslov [kazalo];

            }

nastavite

            {

naslov [indeks] = vrednost;

            }

        }

    }

Zdaj lahko iz razreda izpeljete razred in preglasite indeksator, kot je prikazano spodaj.

javni razred ConcreteContact: ContactBase

    {

javni preglasi niz tega [int index]

        {

dobili

            {

povratni naslov [kazalo];

            }

nastavite

            {

naslov [indeks] = vrednost;

            }

        }

    }

Torej, v zgornjem primeru kode smo raziskali, kako je mogoče indeksatorje uporabljati med dedovanjem tipov in kako lahko prikazujejo polimorfno vedenje.

Kazalo lahko določite enako dobro kot abstraktno. Če želite to narediti, morate ustvariti abstraktni razred in nato v njem določiti indeksator kot abstraktni. Spremenimo razred ContactBase in indeksator določimo kot abstraktnega. Evo, kako bi zdaj izgledala spremenjena različica razreda ContactBase:

 javni abstraktni razred ContactBase

    {

zaščiten niz [] naslov = nov niz [3];

javni abstraktni niz this [int index]

        {

dobili; set;

        }

}

Razreda ConcreteContact vseeno ni treba spreminjati. Zdaj lahko izkoristite indeksator za dodelitev nizovnih vrednosti primerku razreda ConcreteContact, kot je prikazano spodaj.

ConcreteContact contact = nov ConcreteContact ();

kontakt [0] = "Begumpet";

kontakt [1] = "Hyderabad";

kontakt [2] = "Telengana";

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