Ohjelmointi

Kuinka työskennellä indeksoijien kanssa C #: ssä

C # -ohjelmointikieli sisältää indeksoijien tuen - ominaisuuden, jonka avulla voit käyttää objektia vain matriisina. Indeksoijat tunnetaan myös älykkäinä matriiseina, ja ne voidaan määritellä samalla tavalla kuin ominaisuus määritetään. MSDN toteaa: "Indeksoijat sallivat luokan tai rakennelman esiintymien indeksoinnin samalla tavalla kuin taulukot. Indeksoijat muistuttavat ominaisuuksia paitsi, että heidän käyttöoikeudensaantajansa ottavat parametreja."

Vaikka indeksoijilla ja ominaisuuksilla on yhtäläisyyksiä useammalla kuin yhdellä tavalla, niiden välillä on hienovaraisia ​​eroja. Toisin kuin ominaisuuksissa, indeksointiin voi käyttää hakemistoja. Muista, että sinun on käytettävä omaisuutta käyttämällä sen nimeä. Indeksoijat ovat myös luokan jäseniä, joten ne eivät voi olla staattisia. Sinulla voi olla sekä staattisia että ei-staattisia ominaisuuksia.

Seuraava koodinpätkä kuvaa, miten indeksoija ilmoitetaan:

tämä [argumenttilista]

{

saada

  {

  }

Aseta

  {

  }

}

Huomaa, että indeksoijan syntaksiselvityksessä esitetty muokkaaja voi olla yksityinen, julkinen, suojattu tai sisäinen.

Harkitse seuraavaa luokkaa:

julkisen luokan yhteyshenkilö

    {

yksityinen merkkijono [] osoite = uusi merkkijono [3];

julkinen merkkijono tämä [int index]

        {

saada

            {

paluuosoite [hakemisto];

            }

aseta

            {

osoite [hakemisto] = arvo;

            }

        }

    }

Yhteysluokka sisältää yksityisen jäsenen, jonka nimi on osoite, ja määrittelee indeksoijan. Osoitejäsen on tyyppimerkkijono. Näin voit luoda Contact-luokan ilmentymän ja käyttää indeksointilaitetta.

Yhteyshenkilö = uusi yhteyshenkilö ();

kontakti [0] = "Begumpet";

yhteyshenkilö [1] = "Hyderabad";

yhteyshenkilö [2] = "Telengana";

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

Console.WriteLine (ota yhteyttä [i]);

On huomattava, että sinun on käytettävä "tätä" avainsanaa määritettäessä indeksoijia. Huomaa, että et ole pakko käyttää vain kokonaislukuja indeksinä indeksoijien käyttämiseen - voit käyttää myös muita hakumekanismeja. Hakemistoa käytetään yleensä, kun luokkasi edustaa kokoelmaa tai objekteja. Tämän jälkeen voit käyttää hakemistoa päästäksesi tiettyyn elementtiin indeksin avulla.

Kokeillaan esimerkkiä. Harkitse seuraavaa luokkaa nimeltä Asiakas.

julkisen luokan asiakas

    {

julkiset luettelotilaukset

        {

saada; aseta;

        }

julkinen Tilaa tämä [int orderID]

        {

saada

            {

paluu (o: sta tilauksissa

missä o.OrderID == orderID

valitse o) .Ensimmäinen ();

            }

        }

    }

Asiakasluokka määrittää Tilauksen indeksoijan. Se sisältää myös julkisen omaisuuden, joka on luettelo tyyppitilauksesta. Tässä on tilausluokka viitteellesi.

julkisen luokan järjestys

    {

public int OrderID

        {

saada; aseta;

        }

    }

Seuraava koodinpätkä kuvaa, kuinka voit käyttää asiakasluokan hakemistoa hakemaan tietyn tilauksen.

   Lista lstOrder = uusi Lista ();

Tilaus o1 = uusi järjestys ();

o1.TilausID = 1;

Tilaus o2 = uusi järjestys ();

o2TilausID = 2;

lstOrder.Add (o1);

lstOrder.Add (o2);

Asiakasasiakas = uusi asiakas ();

asiakas.Tilaukset = lstOrder;

Tilaus o = asiakas [1];

Katso yllä oleva koodinpätkä. Huomaa, kuinka yleinen luettelo Tyypin tyypistä on luotu ja määritetty Asiakkaat-luokan instanssin Tilaukset-ominaisuudelle. Seuraavaksi välität vain OrderId-parametrin hakeaksesi tietyn tilausinstanssin.

Indeksoijat tukevat perintöä, voivat olla polymorfisia ja myös abstrakteja. Harkitse seuraavaa luokkaa, joka määrittelee virtuaalisen indeksoijan. ContactBase-luokka on muokattu versio Contact-luokasta, josta keskustelimme aiemmin tässä artikkelissa.

julkisen luokan ContactBase

    {

suojattu merkkijono [] osoite = uusi merkkijono [3];

julkinen virtuaalinen merkkijono tämä [int index]

        {

saada

            {

paluuosoite [hakemisto];

            }

aseta

            {

osoite [hakemisto] = arvo;

            }

        }

    }

Voit nyt johtaa luokan ContactBase-luokasta ja ohittaa indeksoijan alla olevan kuvan mukaisesti.

julkisen luokan ConcreteContact: ContactBase

    {

public ohittaa merkkijonon [int index]

        {

saada

            {

paluuosoite [hakemisto];

            }

aseta

            {

osoite [hakemisto] = arvo;

            }

        }

    }

Joten yllä olevassa koodiesimerkissä tutkimme, miten indeksoijia voidaan käyttää tyyppejä perättäessä ja kuinka ne voivat näyttää polymorfista käyttäytymistä.

Voit yhtä hyvin määritellä indeksoijan abstraktina. Tätä varten sinun on luotava abstrakti luokka ja määriteltävä indeksoija abstraktiksi sen sisällä. Muokataan ContactBase-luokkaa ja määritellään indeksoija abstraktiksi. Näin muokattu versio ContactBase-luokasta näyttäisi nyt:

 julkinen abstrakti luokka ContactBase

    {

suojattu merkkijono [] osoite = uusi merkkijono [3];

julkinen abstrakti merkkijono tämä [int indeksi]

        {

saada; aseta;

        }

}

Sinun ei kuitenkaan tarvitse muuttaa ConcreteContact-luokkaa. Voit nyt käyttää indeksointilaitetta osoittamaan merkkijonoarvot ConcreteContact-luokan ilmentymälle alla olevan kuvan mukaisesti.

ConcreteContact-kontakti = uusi ConcreteContact ();

kontakti [0] = "Begumpet";

yhteyshenkilö [1] = "Hyderabad";

yhteyshenkilö [2] = "Telengana";