Programiranje

Kako uporabiti polimorfizem v jeziku C #

Polimorfizem se nanaša na sposobnost predstavitve istega vmesnika za različne oblike. Čeprav je pojem polimorfizem enak v vseh programskih jezikih, ki ga podpirajo, se njegovo izvajanje razlikuje od enega jezika do drugega.

Tri vrste polimorfizma so preobremenitvene, parametrične in vključujoče. Polimorfizem pomaga spodbujati fleksibilnost modelov, saj omogoča, da ima ista metoda različne izvedbe. V bistvu lahko izkoristite polimorfizem, da ločite vmesnik od izvedbe. Spodbuja ponovno uporabo kode in ločevanje pomislekov v vaši prijavi.

Preobremenjujoči polimorfizem je vrsta, ki obstaja v razredih, ki so neodvisni drug od drugega - niso na noben način povezani (dedovanje, odvisnost itd.). Kot primer lahko imate dva različna razreda, ki nikakor nista povezana med seboj in imata metodo z istim imenom. Primer tovrstnega polimorfizma je preobremenitev operaterja.

Parametrični polimorfizem ali polimorfizem predloge je vrsta, pri kateri imate v svojem razredu več kot eno metodo z enakimi imeni, vendar različnimi parametri, to pomeni, da imajo vsi enaka imena metod, vendar se med seboj razlikujejo po parametrih.

Inkluzijski polimorfizem je znan tudi kot redefinicija ali preglasitev metode. Pri tej vrsti polimorfizma lahko podrazred na novo opredeli metodo osnovnega razreda. Ta sposobnost je znana tudi kot specializacija.

Parametrični polimorfizem

To se nanaša na obliko polimorfizma, kjer imate v razredu več kot eno metodo z istim imenom, ki pa se razlikujeta po podpisih metode. Podpis metode vsebuje vrsto vrnitve metode, vrsto parametrov v metodo in zaporedje teh parametrov. Zato se metoda, ki sprejme celo število in znak kot argument, razlikuje v podpisu od druge metode, ki sprejema znak in celo število kot argumente, čeprav sta vrnjeni vrsti obeh metod (z enakimi imeni metod) enaki. Prevajalnik določi natančno metodo, ki jo je treba poklicati, s primerjavo podpisov metode preobremenjenih metod.

Naslednji seznam kod ponazarja, kako je mogoče izvajati preobremenitev metode.

javni enum Resnost

    {

Informativni, opozorilni, kritični

    }

javni razred Logger

    {

javni void Log (niz sporočila)

        {

// Nekaj ​​kode

        }

javni void Log (niz sporočil, resnost)

        {

// Nekaj ​​kode

        }

    }

Glejte zgornji seznam kod. Upoštevajte, kako je bila metoda Log () preobremenjena. To je primer polimorfizma časa prevajanja.

Inkluzijski polimorfizem

Vključni polimorfizem ali preglasitev metode je mogoče v C # doseči z uporabo navideznih metod. Pri preglasitvi metode imate metode, ki imajo enake podpise v osnovnem in izpeljanih razredih. Običajno bi radi uporabili navidezne metode za izvajanje polimorfizma med izvajanjem ali pozne vezave. Upoštevajte, da je navidezna metoda tista, ki je v osnovnem razredu razglašena za navidezno in lahko dovolite, da podrazredi tipa preglasijo navidezne metode.

Naslednji delček kode prikazuje dva razreda - osnovni razred z imenom Logger, ki vsebuje navidezno metodo, imenovano Log, in izpeljani razred z imenom FileLogger, ki razširja razred Logger in preglasi metodo Log osnovnega razreda.

javni razred Logger

    {

javni virtualni void Log (niz sporočila)

        {

Console.WriteLine ("Znotraj metode dnevnika osnovnega razreda Logger");

        }

    }

javni razred FileLogger: Logger

    {

javni preglasiti void Log (niz sporočilo)

        {

Console.WriteLine ("Znotraj metode dnevnika razreda FileLogger");

        }

    }

To je primer preglasitve metode. Tako osnovni kot izpeljani razredi imajo enako metodo z enakimi podpisi. Za izvajanje polimorfizma med izvajanjem ali pozne vezave uporabljamo preglasitev metode. Naslednji delček kode prikazuje, kako lahko s sklicem na osnovni razred pokličete metodo Log.

statična praznina Main (string [] args)

        {

Logger logger = new FileLogger ();

logger.Log ("Pozdravljen, svet!");

Console.ReadKey ();

        }

Ko zaženete zgornji delček kode, se prikliče metoda Log izpeljanega razreda, to je razred Filelogger. Če metoda Log v osnovnem razredu ni bila deklarirana kot virtualna, bi bila namesto nje poklicana osnovna različica metode Log. Ker se ta vezava pojavlja pozno v času izvajanja, je ta vrsta polimorfizma znana kot polimorfizem med izvajanjem ali pozna vezava.

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