Abstract Class at Interface sa C #

Anonim

Ang isang abstract class ay mukhang maraming tulad ng isang interface, ngunit ang konsepto ay medyo nakalilito para sa mga nagsisimula ng OOP. Sa pangkalahatan, ang isang abstract class ay mukhang tulad ng isang interface, siyempre, nang walang anumang pagpapatupad, gayunpaman mayroon silang makatarungang bahagi ng mga pagkakaiba. Habang ang isang abstract klase ay maaaring alinman sa bahagyang o ganap na ipinatupad, isang interface ay dapat na ganap na ipinapatupad. Well, ang pinaka-kapansin-pansing pagkakaiba sa pagitan ng dalawa ay ang isang abstract na klase ay maaaring magkaroon ng default na pagpapatupad, habang ang isang interface ay lamang ang kahulugan ng mga pamamaraan na naglalaman lamang ng mga deklarasyon ng miyembro. Talakayin natin ang mga teoretikal na aspeto ng parehong detalye.

Ano ang Abstract Class?

Ang isang abstract class ay isang espesyal na uri ng klase na kumikilos bilang isang base ng iba pang mga klase at hindi maaaring instantiated. Ang pagpapatupad ng lohika ng isang abstract klase ay ibinigay sa pamamagitan ng mga nagmula sa mga klase. Upang gumawa ng isang abstract klase, ang "abstract" modifier ay ginagamit na nangangahulugan na ang ilang mga nawawalang pagpapatupad ay kailangang ipatupad sa klase nakuha mula dito. Naglalaman ito ng parehong mga abstract at non-abstract na mga miyembro. Ang isang abstract klase ay inilaan upang magbigay ng pangunahing pag-andar na maaaring higit pang ibinahagi at na-override ng maraming nagmula klase. Ito ay kapaki-pakinabang upang maiwasan ang anumang uri ng code na pagkopya. Mukhang napaka-tulad ng mga interface ngunit may idinagdag na pag-andar.

Ano ang isang Interface?

Ang isang interface, sa kabilang banda, ay hindi isang klase na naglalaman lamang ng lagda ng pag-andar. Ito ay isang pattern na walang pagpapatupad. Sa maliwanag na pagsasalita, ito ay lamang ang kahulugan ng mga pamamaraan na naglalaman lamang ng deklarasyon ng mga miyembro. Ito ay isang walang laman na shell na hindi naglalaman ng pagpapatupad ng mga miyembro nito. Ito ay tulad ng isang abstract base class na naglalaman lamang ng mga abstract na mga miyembro tulad ng mga pamamaraan, mga kaganapan, indexers, mga ari-arian, atbp. Hindi ito maaaring instantiated nang direkta at ang mga miyembro nito ay maaaring ipatupad ng anumang klase. Bukod pa rito, ang maraming mga interface ay maaaring ipatupad ng isang klase, gayunpaman, ang isang klase ay maaari lamang magmana ng isang klase.

Abstract Class vs. Interface: pagkakaiba sa pagitan ng Abstract Class at Interface sa C #

  1. Maramihang Pagbabayad - Ang isang klase ay maaari lamang gumamit ng isang abstract klase, kaya maramihang mga mana ay hindi suportado. Ang isang interface, sa kabilang banda, ay maaaring sumuporta sa maramihang mana, na nangangahulugan na ang isang klase ay maaaring magmana ng anumang bilang ng mga pamana.
  2. Kahulugan ng Abstract Class at Interface sa C #- Ang isang abstract klase ay isang espesyal na uri ng klase na maaaring maglaman ng kahulugan na walang pagpapatupad. Ang pagpapatupad na lohika ay ipinagkakaloob ng mga nakuha na klase nito. Maaari itong magkaroon ng abstract pati na rin ang mga di-abstract na mga pamamaraan. Ang isang interface, sa kabilang banda, ay isang pattern lamang na hindi maaaring gawin. Technically, ito ay isang walang laman na shell.
  3. Pagpapatupad - Ang isang abstract na klase ay maaaring naglalaman ng parehong kahulugan at pagpapatupad nito. Ito ay isang hindi kumpletong klase na hindi maaaring instantiated. Ang isang interface ay maaari lamang magkaroon ng lagda ng pag-andar nang walang anumang code.
  4. Access Modifier - Ang isang abstract na klase ay maaaring magkaroon ng maraming modifier ng access tulad ng subs, function, property, atbp, habang ang isang interface ay hindi pinahihintulutang magkaroon ng mga modifier ng access at ang lahat ng mga pamamaraan ay dapat na ganap na tinukoy bilang pampubliko.
  5. Homogeneity - Ang isang abstract klase ay ginagamit para sa mga pagpapatupad ng parehong uri, pag-uugali, at katayuan, habang ang isang interface ay ginagamit para sa mga pagpapatupad na nagbahagi lamang ng mga lagda ng paraan.
  6. Deklarasyon - Ang isang abstract na klase ay gumaganap bilang isang base class para sa lahat ng iba pang mga klase upang maaari itong ipahayag o gamitin ang anumang variable habang ang isang interface ay hindi pinahihintulutang ipahayag ang anumang mga variable.
  7. Pahayag ng Tagabuo - Habang ang isang abstract klase ay maaaring magkaroon ng deklarasyon ng tagapagbuo, ang isang interface ay hindi maaaring magkaroon ng deklarasyon ng tagapagbuo.
  8. Core kumpara sa paligid - Ang isang abstract klase ay ginagamit upang tukuyin ang pangunahing pagkakakilanlan ng isang klase at maaaring magamit para sa mga bagay ng parehong uri ng data. Ang isang interface, sa kabilang banda, ay ginagamit upang tukuyin ang kakayahang paligid ng isang klase.
  9. Matibay kumpara sa malambot - Ang isang mahirap unawain klase ay mas malambot sa mga tuntunin ng pag-andar, hindi bababa sa pananaw ng isang developer, habang ang isang interface ay mas matibay.

Abstract Class vs. Interface: Form ng talahanayan

Abstract Class

Interface

Ang isang abstract na klase ay maaaring magkaroon ng lahat ng mga modifier na ma-access para sa deklarasyon ng mga function, subs, at mga katangian ng miyembro. Ang isang interface ay hindi pinahihintulutan na magkaroon ng mga modifier ng access para sa deklarasyon ng mga function, subs, property, atbp. Ang lahat ng mga miyembro ay ipinapalagay bilang nang walang pahiwatig sa publiko.
Ang isang klase ay maaari lamang magamit ang isang abstract class. Ang isang klase ay maaaring magmana ng anumang bilang ng mga interface.
Maraming mana ay hindi sinusuportahan sa abstract class. Maaaring suportahan ng isang interface ang maramihang pamana.
Sa teknikal, ito ay isang klase na maaaring o maaaring hindi naglalaman ng parehong kahulugan at pagpapatupad nito. Ang isang interface ay maaari lamang magkaroon ng lagda ng pag-andar upang ito ay karaniwang isang walang laman na shell.
Ang isang abstract class ay maaaring maglaman ng mga miyembro. consts, tinukoy na mga pamamaraan, at paraan ng stubs. Ang isang interface ay maaari lamang maglaman ng mga pamamaraan at mga consts.
Tinutukoy nito ang pangunahing pagkakakilanlan ng isang klase at ginagamit upang ilarawan ang mga bagay ng parehong uri ng data. Ito ay ginagamit upang ilarawan ang paligid kakayahan ng isang klase.
Ang mga miyembro ng isang abstract class ay hindi maaaring maging static maliban kung ito ay isang Kumpletong Miyembro. Ang mga miyembro ng isang interface ay hindi maaaring maging static.
Perpekto ito para sa mga pagpapatupad ng parehong uri at karaniwang pag-uugali. Mas mainam na gumamit ng mga interface kung ilang mga pagpapatupad ang nagbabahagi lamang ng mga lagda ng paraan.
Maaari itong magkaroon ng deklarasyon ng tagapagbuo. Hindi ito maaaring magkaroon ng deklarasyon ng tagapagbuo.
Ang isang abstract class ay may mga paunang natukoy na mga larangan at mga constrner. Ang mga patlang ay hindi maaaring tinukoy sa mga interface.
Maaari itong magkaroon ng parehong abstract at di-abstract na mga pamamaraan. Maaari lamang itong magkaroon ng mga abstract na pamamaraan.

Buod

Ano ang pagkakaiba sa pagitan ng isang mahirap na klase at isang interface? Marahil ito ay isa sa mga pinaka-karaniwang tanong na tinanong sa anumang teknikal na pakikipanayam. Ikaw ay malamang na makahanap ng isang kalabisan ng impormasyon tungkol sa mga abstract na mga klase at mga interface sa anumang C # tutorial, gayunpaman, pag-unawa sa pagkakaiba sa pagitan ng dalawa ay lubos ang mahigpit na bahagi. Maaari mong pagsamahin ang lahat ng impormasyon na maaari mong makita at hindi pa rin makakakuha ng sapat. Well, conceptually pareho ang pinakamahalagang tuntunin sa programming at medyo pareho, gayunpaman, magkakaiba ang mga ito sa mga tuntunin ng pag-andar. Habang ang isang abstract klase ay isang espesyal na uri ng klase na kumikilos bilang isang base para sa iba pang mga klase, ang isang interface, sa kabilang banda, ay lamang ng isang walang laman na shell na may lamang mga deklarasyon ng miyembro.