Programmēšana

Kā ieviest polimorfismu C #

Polimorfisms attiecas uz spēju uzrādīt vienu un to pašu saskarni dažādām formām. Kaut arī polimorfisma jēdziens visās programmēšanas valodās, kas to atbalsta, ir vienāds, tā ieviešana dažādās valodās atšķiras.

Trīs polimorfisma veidi ir pārslodze, parametri un iekļaušana. Polimorfisms palīdz veicināt dizaina elastību, ļaujot vienai un tai pašai metodei īstenot atšķirīgi. Būtībā jūs varat izmantot polimorfismu, lai nodalītu saskarni no ieviešanas. Tas veicina koda atkārtotu izmantošanu un problēmu atdalīšanu jūsu lietojumprogrammā.

Polimorfisma pārslodze ir veids, kas pastāv klasēs, kuras ir neatkarīgas viena no otras - tās nav savstarpēji saistītas (mantojums, atkarība utt.). Piemēram, jums var būt divas atšķirīgas klases, kas nav savstarpēji saistītas un kurām ir metode ar tādu pašu nosaukumu. Operatora pārslodze ir šāda veida polimorfisma piemērs.

Parametriskais polimorfisms jeb veidņu polimorfisms ir veids, kurā jūsu klasē ir vairākas metodes ar vienādiem nosaukumiem, bet ar dažādiem parametriem, t.i., tām visām ir vienādi metožu nosaukumi, taču parametros tie atšķiras.

Iekļaušanas polimorfisms ir pazīstams arī kā atkārtota definēšana vai metodes ignorēšana. Šāda veida polimorfismā apakšklase var no jauna definēt pamatklases metodi. Šo spēju sauc arī par specializāciju.

Parametriskais polimorfisms

Tas attiecas uz polimorfisma formu, kad jūsu klasē ir vairāk nekā viena metode, kurai ir tāds pats nosaukums, bet tās atšķiras pēc to metožu parakstiem. Metodes paraksts sastāv no metodes atgriešanās veida, metodes parametru veida un šo parametru secības. Tādējādi metode, kas pieņem veselu skaitli un rakstzīmi kā argumentu, atšķiras ar parakstu no citas metodes, kas rakstzīmi un veselu skaitli pieņem kā argumentus, lai gan abu šo metožu atgriešanas veidi (kuriem ir vienādi metožu nosaukumi) ir vienādi. Kompilators nosaka precīzu izsaucamo metodi, salīdzinot pārslogoto metožu metožu parakstus.

Šis kodu saraksts parāda, kā var īstenot metodes pārslodzi.

sabiedrības enum Nopietnība

    {

Informatīvs, brīdinošs, kritisks

    }

sabiedriskās klases mežizstrādātājs

    {

public void žurnāls (virknes ziņojums)

        {

// Daži kodi

        }

public void žurnāls (virknes ziņojums, smaguma pakāpe)

        {

// Daži kodi

        }

    }

Skatiet iepriekš minēto kodu sarakstu. Ievērojiet, kā metode Log () ir pārslogota. Šis ir kompilēšanas laika polimorfisma piemērs.

Iekļaušanas polimorfisms

Iekļaušanas polimorfismu vai metodes ignorēšanu var panākt C #, izmantojot virtuālās metodes. Metodes ignorēšanā jums ir metodes ar vienādiem parakstiem gan bāzes, gan atvasinātajās klasēs. Jūs parasti vēlaties izmantot virtuālās metodes, lai ieviestu izpildlaika polimorfismu vai novēlotu saistīšanu. Ņemiet vērā, ka virtuālā metode ir tā, kas bāzes klasē tiek deklarēta kā virtuāla, un jūs varat atļaut tipa apakšklasēm ignorēt virtuālo (-ās) metodi (-es).

Šis koda fragments parāda divas klases - bāzes klasi ar nosaukumu Logger, kas satur virtuālo metodi ar nosaukumu Log un atvasinātu klasi ar nosaukumu FileLogger, kas paplašina reģistrētāja klasi un ignorē bāzes klases žurnāla metodi.

sabiedriskās klases mežizstrādātājs

    {

publisks virtuālā tukšuma žurnāls (virknes ziņojums)

        {

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

        }

    }

publiskā klase FileLogger: Logger

    {

public override void Log (virknes ziņojums)

        {

Console.WriteLine ("FileLogger klases žurnāla metode iekšpusē");

        }

    }

Šis ir metodes ignorēšanas piemērs. Gan bāzes, gan atvasinātajām klasēm ir viena un tā pati metode ar identiskiem parakstiem. Mēs izmantojam metodes ignorēšanu, lai ieviestu izpildes laika polimorfismu vai novēlotu saistīšanu. Šis koda fragments parāda, kā žurnāla metodi var izsaukt, izmantojot bāzes klases atsauci.

static void Main (virkne [] args)

        {

Logger logger = jauns FileLogger ();

logger.Log ("Sveika pasaule!");

Console.ReadKey ();

        }

Izpildot iepriekš minēto koda fragmentu, tiks izsaukta atvasinātās klases Log metode, t.i., Filelogger klase. Ja metode Log netika deklarēta kā virtuāla bāzes klasē, tā vietā tiktu izsaukta metodes Log versija. Tā kā šī saistīšanās notiek vēlu izpildes laikā, šāda veida polimorfisms ir pazīstams kā darbības laika polimorfisms vai novēlota saistīšanās.

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