C # - Munur á ágripi, sýndar og hnekki

c #

Í dag langar mig til að sýna þér muninn á abstrakt, sýndar og hnekkingu í C #.

Ágrip

Með því að bæta ágrip við hlutverk eða flokk þýðir það að það er ekki raunverulegt og bíður þess að vera útfærður af afleiddum flokki. Við skulum búa til abstrakt flokk dýr:

opinber ágripstími Dýr
{
       almenningur ógilt gelta ()
       {
            Console.WriteLine („Dýrabörkur“);
       }
 }

Við skulum reyna að búa til dæmi um flokk dýra.

Dýra dýr = nýtt dýr ();

Við skulum keyra það og þýðandinn skilar þér villu þar sem þú segir að þú getir ekki búið til dæmi um abstrakt bekkinn

Ekki er hægt að koma á óhlutbundnum bekk

Við skulum búa til flokk sem erfir Animal.

almenningsflokkur Hundur: Dýr
{
   almenningur ógilt gelta ()
   {
      Console.WriteLine („Hundabörkur“);
   }
}

Nú erum við fær um að búa til dæmi um dýr með því að búa til hlut Hund. Við getum auðvitað búið til dæmi af Hundur með Hundategund líka.

Dýra dýr = nýtt hundur ();
Hundahundur = nýr Hundur ();

Venjulega langar þig til að nota fyrstu línuna því þegar þú býrð til fleiri og fleiri flokka sem erfa dýr, þá eru allir enn dýrategundir og hægt er að fara framhjá þeim til að virka með breytu dýrategundar eða safn með dýrategund. Þetta er kallað fjölbreytni.

Svo hvað gerist á fallbörkum? Fyrir breytilegt dýr, vegna þess að tegund þess er Dýra, verður bjallaaðgerð skilgreind í Dýraflokki kölluð. Fyrir breytilegan hund, vegna þess að gerð hans er Hundur, verður geltaaðgerð skilgreind í Hundaflokki kölluð.

Ef þú setur ágrip á aðgerðir geturðu ekki innleitt aðgerðina í þeim flokki og þú verður að innleiða hana í afleiddum bekk. Við skulum breyta dýraflokki og Hundaflokki í þetta:

opinber ágripstími Dýr
{
     opinbert ágrip tómt gelta ()
     {
          Console.WriteLine („Dýrabörkur“);
     }
}
almenningsflokkur Hundur: Dýr
{
      almenningur ógilt gelta ()
      {
           Console.WriteLine („Hundabörkur“);
      }
}

Þegar keyrð hefur verið safnað saman villum.

Ekki er hægt að útfæra ágrip aðgerð

Svo skulum fylgja leiðbeiningum þýðandans. Fjarlægðu útfærslu gelta í dýraríkinu og keyrðu. Hvað? Samantektarvillu er skilað !! ??

Hnekkja

Já. Hér kemur annað lykilorðið - hnekkja. Til að útfæra geltaaðgerðina í Dýraflokki í Hundaflokki, verður þú að bæta við hnekki til geltavirkni svo að segja þýðandanum að þú sért að innleiða gelta í Dýraflokki í stað þess að bæta við annarri geltaaðgerð í Hundaflokki (eins og það sem við höfum gert áður). Eftir breytingu, árangur samsetningar og þú getur nú séð báðar línurnar eru „Hundabörkur“.

Sýndar

Við skulum tala um sýndar. Með því að bæta sýndar við aðgerð ertu að bjóða upp á sameiginlega rökfræði fyrir aðgerðina en gefur sveigjanleika til að hnekkja grunnaðgerðinni. Þú segir kannski vel að það sé nokkurn veginn það sama þegar þú bætir ekki sýndaraðgerð við aðgerðina. Nei það er það ekki. Ég er að sýna þér muninn á sýndaraðgerð og sýndaraðgerð. Við skulum breyta dýra- og hundatímum og aðalhlutverki:

dagskrá almennings
{
    truflanir ógiltar Aðal (strengur [] args)
    {
        Dýra dýr = nýtt hundur ();
        Hundahundur = nýr Hundur ();
        dýra. gelta ();
        hundur.börkur ();
        dýr.eat ();
        hundur.eat ();
        Hugga.ReadLine ();
    }
}
almenningsflokkur Dýr
{
    almenningur sýndar ógilt gelta ()
    {
        Console.WriteLine („Dýrabörkur“);
    }
    almennings ógilt borða ()
    {
        Console.WriteLine („Animal Eat“);
    }
}
almenningsflokkur Hundur: Dýr
{
    opinbert hnekki ógilt gelta ()
    {
        Console.WriteLine („Hundabörkur“);
    }
    almennings ógilt borða ()
    {
        Console.WriteLine („Dog Eat“);
    }
}

Og niðurstaðan er þessi:

Þegar þú gengur framhjá sýndaraðgerðinni í Base Class verða bæði aðgerðir í Base og Derived bekknum eins. Án sýndar og hnekkja muntu hafa 2 mismunandi aðgerðir - Animal.bark og Dog.bark.

Við skulum gera eina tilraun í viðbót. Bætir við eftirfarandi tveimur línum í Aðalaðgerð:

Dýra dýr2 = nýtt dýr ();
dýra2. gelta ();

Nú þegar þú keyrir það færðu rökfræði skilgreind í Dýraflokki. Svo skulum draga saman þessar 3 samsetningar yfirlýsingar og niðurstöðurnar:

Dýra dýr = ný hundur (); dýra. Gelta (); // Framleiðsla: Hundabörkur
Hundahundur = nýr Hundur (); hundur. Gelta (); // Framleiðsla: Hundabörkur
Dýra dýr2 = nýtt dýr (); dýra2. gelta (); // Framleiðsla: Dýrabörkur

Yfirlit:

Til ágrips, þegar þú notar á bekknum, getur þú ekki búið til dæmi um þann flokk. Þú getur búið til dæmi um barnaflokkinn sem erfir það eða búið til dæmi um barnaflokkinn með grunnflokkategund. Þegar þú notar on virka geturðu ekki framkvæmt aðgerðina í grunnflokki og verður að hnekkja af barnaflokki.

Fyrir raunverulegur, getur þú útfært aðgerðina í grunnflokki. Þegar barnaflokkurinn hnekur því verður aðeins 1 útgáfa af þeirri aðgerð.

Til að hnekkja er aðeins hægt að beita hnekki við hnekki, sýndar eða abstrakt.

Það er það í dag. Vona að þið hafið gaman af greininni og eigið góðan dag

Upphaflega birt á timmydinheing.com 18. apríl 2018.