Programmering

Hvordan jobbe med indekserer i C #

Programmeringsspråket C # inkluderer støtte for indekserer - en funksjon som lar deg bruke et objekt akkurat som en matrise. Indekserer er også kjent som smarte matriser og kan defineres som hvordan en eiendom er definert. MSDN sier: "Indekserer tillater at indekser av forekomster av en klasse eller struktur akkurat som matriser. Indekserer ligner på egenskaper bortsett fra at deres aksessorer tar parametere."

Selv om indekserer og egenskaper har likheter på flere måter enn en, er det subtile forskjeller mellom dem. I motsetning til egenskaper, kan du få tilgang til en indekser ved hjelp av indekser. Husk at du må få tilgang til en eiendom ved å bruke navnet. Indekserer er også eksemplemedlemmer i en klasse, og de kan derfor ikke være statiske. Du kan ha både statiske og ikke-statiske egenskaper.

Følgende kodebit illustrerer hvordan en indekserer erklæres:

denne [argumentlisten]

{

  {

  }

Sett

  {

  }

}

Merk at modifikatoren som vist i syntakserklæringen til en indekser kan være privat, offentlig, beskyttet eller intern.

Tenk på følgende klasse:

offentlig klasse Kontakt

    {

privat streng [] adresse = ny streng [3];

offentlig streng denne [int-indeksen]

        {

            {

returadresse [indeks];

            }

sett

            {

adresse [indeks] = verdi;

            }

        }

    }

Kontaktklassen inneholder et privat medlem som heter adresse og definerer en indekser. Adressemedlemmet er en rekke typestrenger. Slik kan du opprette en forekomst av kontaktklassen og bruke indeksøren.

Kontaktkontakt = ny kontakt ();

contact [0] = "Begumpet";

kontakt [1] = "Hyderabad";

kontakt [2] = "Telengana";

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

Console.WriteLine (kontakt [i]);

Det bør bemerkes at du må bruke "dette" nøkkelordet for å definere indekserer. Merk at du ikke er begrenset til å bruke bare heltall som indekser for å få tilgang til indekserer - du kan til og med bruke andre oppslagsmekanismer også. En indekserer brukes vanligvis når klassen din representerer en samling eller objekter. Du kan deretter bruke indekserer for å få tilgang til et bestemt element ved hjelp av indeks.

La oss prøve et eksempel. Tenk på følgende klasse som heter Kunde.

offentlig klasse kunde

    {

offentlige listeordrer

        {

få; sett;

        }

public Bestill dette [int orderID]

        {

            {

retur (fra o i ordrer

der o.OrderID == orderID

velg o) .First ();

            }

        }

    }

Kundeklassen definerer en indekser av typen Order. Den inneholder også en offentlig eiendom som er en liste over typen Order. Her er ordreklassen som referanse.

offentlig klasse Orden

    {

offentlig int OrderID

        {

få; sett;

        }

    }

Følgende kodebit illustrerer hvordan du får tilgang til indeksøren i kundeklassen for å hente en bestemt ordre.

   Liste lstOrder = ny liste ();

Ordre o1 = ny ordre ();

o1.OrderID = 1;

Ordre o2 = ny ordre ();

o2.OrderID = 2;

lstOrder.Add (o1);

lstOrder.Add (o2);

Kundekunde = ny kunde ();

kunde.Bestillinger = lstBestilling;

Bestill o = kunde [1];

Se kodebiten ovenfor. Legg merke til hvordan en generell liste av typen Order er opprettet og tildelt Order-egenskapen til en forekomst av kundeklassen. Deretter sender du bare OrderId som en parameter for å hente den bestemte ordreforekomsten.

Indekserer støtter arv, kan være polymorfe og kan også være abstrakte. Tenk på følgende klasse som definerer en indekser som er virtuell. ContactBase-klassen er modifisert versjon av Contact-klassen vi diskuterte tidligere i denne artikkelen.

offentlig klasse ContactBase

    {

beskyttet streng [] adresse = ny streng [3];

offentlig virtuell streng denne [int-indeksen]

        {

            {

returadresse [indeks];

            }

sett

            {

adresse [indeks] = verdi;

            }

        }

    }

Du kan nå utlede en klasse fra ContactBase-klassen og overstyre indeksøren som vist nedenfor.

offentlig klasse BetongKontakt: ContactBase

    {

offentlig overstyr streng denne [int-indeksen]

        {

            {

returadresse [indeks];

            }

sett

            {

adresse [indeks] = verdi;

            }

        }

    }

Så i kodeeksemplet ovenfor undersøkte vi hvordan indekserer kan brukes mens man arver typer, og hvordan de kan vise polymorf oppførsel.

Du kan like godt definere en indekser som abstrakt. For å gjøre dette må du opprette en abstrakt klasse og deretter definere en indekser som abstrakt inne i den. La oss endre ContactBase-klassen og definere indeksøren som abstrakt. Slik ser den modifiserte versjonen av ContactBase-klassen ut:

 offentlig abstrakt klasse ContactBase

    {

beskyttet streng [] adresse = ny streng [3];

offentlig abstrakt streng denne [int-indeksen]

        {

få; sett;

        }

}

Du trenger ikke endre ConcreteContact-klassen uansett. Du kan nå bruke indeksøren til å tilordne strengverdier til en forekomst av ConcreteContact-klassen som vist nedenfor.

ConcreteContact contact = new ConcreteContact ();

contact [0] = "Begumpet";

kontakt [1] = "Hyderabad";

kontakt [2] = "Telengana";