Ohjelmointi

Kuinka toteuttaa polymorfismi C #: ssa

Polymorfismi viittaa kykyyn esittää sama rajapinta eri muodoille. Vaikka polymorfismin käsite on sama kaikilla sitä tukevilla ohjelmointikielillä, sen toteutus vaihtelee kielittäin.

Kolme polymorfismin tyyppiä ovat ylikuormitus, parametri ja inkluusio. Polymorfismi auttaa edistämään suunnittelun joustavuutta sallimalla saman menetelmän erilaiset toteutukset. Pohjimmiltaan voit hyödyntää polymorfismia erottaaksesi käyttöliittymän toteutuksesta. Se edistää koodin uudelleenkäyttöä ja ongelmien erottamista sovelluksessasi.

Polymorfismien ylikuormitus on tyyppi, jota esiintyy luokissa, jotka ovat toisistaan ​​riippumattomia - ne eivät liity toisiinsa (perintö, riippuvuus jne.) Millään tavalla. Esimerkiksi, sinulla voi olla kaksi erillistä luokkaa, jotka eivät liity millään tavalla toisiinsa ja joilla on menetelmä samalla nimellä. Operaattorin ylikuormitus on esimerkki tämän tyyppisestä polymorfismista.

Parametrinen polymorfismi tai mallipolymorfismi on tyyppi, jossa luokassasi on useampi kuin yksi menetelmä, joilla on identtiset nimet, mutta vaihtelevat parametrit, eli niillä kaikilla on samat menetelmän nimet, mutta ne eroavat parametreista.

Inkluusiopolymorfismi tunnetaan myös uudelleenmäärittelynä tai menetelmän ohittamisena. Tämän tyyppisessä polymorfismissa alaluokka voi määritellä perusmenetelmän menetelmän uudelleen. Tämä kyky tunnetaan myös erikoistumisena.

Parametrinen polymorfismi

Tämä viittaa polymorfismin muotoon, jossa luokassasi on useampi kuin yksi menetelmä, jolla on sama nimi, mutta ne eroavat toisistaan ​​menetelmän allekirjoituksiltaan. Menetelmän allekirjoitus käsittää menetelmän palautustyypin, menetelmän parametrien tyypin ja näiden parametrien järjestyksen. Siksi menetelmä, joka hyväksyy kokonaisluvun ja merkin argumenttina, eroaa allekirjoituksessa toisesta menetelmästä, joka hyväksyy merkin ja kokonaisluvun argumenteiksi, vaikka molempien näiden menetelmien palautustyypit (joilla on samat metodinimet) ovat samat. Kääntäjä määrittää tarkan kutsuttavan menetelmän vertaamalla ylikuormitettujen menetelmien menetelmän allekirjoituksia.

Seuraava koodiluettelo kuvaa kuinka menetelmän ylikuormitus voidaan toteuttaa.

public enum Vakavuus

    {

Tiedotus, varoitus, kriittinen

    }

julkisen luokan kirjaaja

    {

public void Loki (merkkijono)

        {

// Joitakin koodeja

        }

public void Loki (merkkijono, vakavuusaste)

        {

// Joitakin koodeja

        }

    }

Katso yllä oleva koodiluettelo. Huomaa, miten Loki () -menetelmä on ylikuormitettu. Tämä on esimerkki kokoamisajan polymorfismista.

Inkluusion polymorfismi

Inkluusiopolymorfismi tai menetelmän ohittaminen voidaan saavuttaa C #: ssä virtuaalimenetelmillä. Menetelmän ohittamisessa sinulla on menetelmiä, joilla on identtiset allekirjoitukset sekä perus- että johdetuissa luokissa. Haluat tyypillisesti käyttää virtuaalisia menetelmiä ajonaikaisen polymorfismin tai myöhäisen sitoutumisen toteuttamiseksi. Huomaa, että virtuaalinen menetelmä on menetelmä, joka ilmoitetaan virtuaaliseksi perusluokassa, ja voit antaa tyypin aliluokkien ohittaa virtuaaliset menetelmät.

Seuraava koodinpätkä näyttää kaksi luokkaa - perusluokan Logger, joka sisältää virtuaalisen menetelmän nimeltä Log ja johdetun luokan FileLogger, joka laajentaa Logger-luokkaa ja ohittaa perusluokan Log-menetelmän.

julkisen luokan kirjaaja

    {

public virtual void Log (merkkijonoviesti)

        {

Console.WriteLine ("Inside the Log method of the basic class Logger");

        }

    }

julkisen luokan FileLogger: Logger

    {

public override void Log (merkkijonoviesti)

        {

Console.WriteLine ("FileLogger-luokan lokitapa");

        }

    }

Tämä on esimerkki menetelmän ohittamisesta. Sekä perus- että johdetuilla luokilla on sama menetelmä ja identtiset allekirjoitukset. Käytämme menetelmän ohittamista ajoajan polymorfismin tai myöhäisen sitoutumisen toteuttamiseksi. Seuraava koodinpätkä osoittaa, miten lokimenetelmää voidaan kutsua perusluokan viitteen avulla.

staattinen void Main (merkkijono [] args)

        {

Logger logger = uusi FileLogger ();

logger.Log ("Hei maailma!");

Console.ReadKey ();

        }

Kun suoritat yllä olevan koodinpätkän, johdetun luokan eli Filelogger-luokan lokitapa kutsutaan. Jos lokimenetelmää ei ilmoitettu virtuaaliseksi perusluokassa, sen sijaan olisi kutsuttu Log-menetelmän perusversio. Koska tämä sitoutuminen tapahtuu myöhässä ajon aikana, tämän tyyppinen polymorfismi tunnetaan ajonaikaisena polymorfismina tai myöhäisenä sitoutumisena.

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