Programmēšana

Kā strādāt ar indeksētājiem C #

Programmēšanas valoda C # ietver indeksētāju atbalstu - funkciju, kas ļauj objektu izmantot tikai kā masīvu. Indeksētāji ir pazīstami arī kā viedie bloki, un tos var definēt līdzīgi tam, kā tiek definēts īpašums. MSDN norāda: "Indeksētāji ļauj klases vai struktūras gadījumus indeksēt tāpat kā masīvus. Indeksētāji atgādina rekvizītus, izņemot to, ka viņu piekļuvēji ņem parametrus."

Lai gan indeksētājiem un īpašībām ir līdzības vairākos veidos, tomēr starp tām ir smalkas atšķirības. Atšķirībā no īpašībām, indeksatoram varat piekļūt, izmantojot indeksus. Atcerieties, ka jums ir jāpiekļūst īpašumam, izmantojot tā nosaukumu. Arī indeksētāji ir klases locekļi, tāpēc tie nevar būt statiski. Jums var būt gan statiskas, gan nestatiskas īpašības.

Šis koda fragments parāda, kā tiek deklarēts indeksētājs:

šis [argumentu saraksts]

{

gūt

  {

  }

Iestatiet

  {

  }

}

Ņemiet vērā, ka pārveidotājs, kā parādīts indeksētāja sintakses deklarācijā, var būt privāts, publisks, aizsargāts vai iekšējs.

Apsveriet šādu klasi:

sabiedrības klases kontakts

    {

privāta virkne [] adrese = jauna virkne [3];

publiska virkne šī [int indekss]

        {

gūt

            {

atgriešanās adrese [rādītājs];

            }

komplekts

            {

adrese [rādītājs] = vērtība;

            }

        }

    }

Kontaktu klasē ir privāts dalībnieks ar nosaukumu adrese un definēts indeksētājs. Adreses loceklis ir virknes masīvs. Lūk, kā jūs varat izveidot klases kontaktpersonu un izmantot indeksētāju.

Kontaktu kontakts = jauns Kontakts ();

kontakts [0] = "Begumpet";

kontakts [1] = "Hyderabad";

kontakts [2] = "Telengana";

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

Console.WriteLine (sazinieties ar [i]);

Jāatzīmē, ka, lai definētu indeksētājus, jums jāizmanto atslēgvārds "šis". Ņemiet vērā, ka, lai piekļūtu rādītājiem, jūs neierobežojat kā indeksus izmantot tikai veselus skaitļus - varat izmantot arī citus uzmeklēšanas mehānismus. Indeksatoru parasti izmanto, ja jūsu klase pārstāv kolekciju vai objektus. Pēc tam varat izmantot indeksētāju, lai piekļūtu konkrētam elementam, izmantojot indeksu.

Izmēģināsim piemēru. Apsveriet šādu klasi ar nosaukumu Klients.

sabiedriskās klases klients

    {

public List Orders

        {

gūt; komplekts;

        }

publiski Pasūtiet šo [int orderID]

        {

gūt

            {

atgriešanās (no o pasūtījumos

kur o.OrderID == orderID

izvēlieties o) .Pirmais ();

            }

        }

    }

Klientu klasē ir noteikts rīkojuma indeksētājs. Tajā ir arī publisks īpašums, kas ir pasūtījuma veida saraksts. Šeit ir norādīta pasūtījumu klase.

sabiedrības klases rīkojums

    {

public int OrderID

        {

gūt; komplekts;

        }

    }

Šis koda fragments parāda, kā piekļūt klientu klases indeksētājam, lai izgūtu noteiktu pasūtījumu.

   Saraksts lstOrder = jauns saraksts ();

Rīkojums o1 = jauns Rīkojums ();

o1.Pasūtījuma ID = 1;

Rīkojums o2 = jauns pasūtījums ();

o2.Pasūtījuma ID = 2;

lstOrder.Add (o1);

lstOrder.Add (o2);

Klienta klients = jauns klients ();

klients.Pasūtījumi = lstOrder;

Pasūtījums o = klients [1];

Skatiet iepriekš minēto koda fragmentu. Ievērojiet, kā ir izveidots vispārīgs Pasūtījuma veida saraksts un piešķirts Klientu klases instances īpašumam Pasūtījumi. Pēc tam jūs vienkārši nododat parametru OrderId, lai izgūtu konkrēto pasūtījuma gadījumu.

Indeksētāji atbalsta mantojumu, var būt polimorfi un arī abstrakti. Apsveriet šādu klasi, kas definē virtuālo indeksētāju. ContactBase klase ir modificēta kontaktu klases versija, par kuru mēs runājām iepriekš šajā rakstā.

publiskā klase ContactBase

    {

aizsargāta virkne [] adrese = jauna virkne [3];

publiska virtuāla virkne šī [int indekss]

        {

gūt

            {

atgriešanās adrese [rādītājs];

            }

komplekts

            {

adrese [rādītājs] = vērtība;

            }

        }

    }

Tagad jūs varat atvasināt klasi no ContactBase klases un ignorēt indeksētāju, kā parādīts zemāk.

publiskā klase ConcreteContact: ContactBase

    {

publiski ignorēt virkni [int indekss]

        {

gūt

            {

atgriešanās adrese [rādītājs];

            }

komplekts

            {

adrese [rādītājs] = vērtība;

            }

        }

    }

Tātad iepriekš minētajā kodu piemērā mēs izpētījām, kā indeksētājus var izmantot, pārmantojot tipus, un kā tie var parādīt polimorfu uzvedību.

Tikpat labi indeksatoru var definēt kā abstraktu. Lai to izdarītu, jums jāizveido abstrakta klase un pēc tam tajā jānosaka indeksētājs kā abstrakts. Pārveidosim ContactBase klasi un definēsim indeksatoru kā abstraktu. Lūk, kā tagad izskatīsies ContactBase klases modificētā versija:

 publiskā abstraktā klase ContactBase

    {

aizsargāta virkne [] adrese = jauna virkne [3];

publiska abstrakta virkne šī [int indekss]

        {

gūt; komplekts;

        }

}

Jums tik un tā nav jāmaina ConcreteContact klase. Tagad jūs varat izmantot indeksētāju, lai piešķirtu virknes vērtības ConcreteContact klases gadījumam, kā parādīts zemāk.

ConcreteContact contact = jauns ConcreteContact ();

kontakts [0] = "Begumpet";

kontakts [1] = "Hyderabad";

kontakts [2] = "Telengana";

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