Razlika med abstraktnim razredom in vmesnikom v C #

Abstraktni razred je videti veliko kot vmesnik, koncept pa je malce zmeden za začetnike OOP. Konceptualno abstraktni razred izgleda tako kot vmesnik, seveda brez kakršne koli izvedbe, vendar imajo svoj pravičen delež razlik. Medtem ko je abstraktni razred lahko delno ali v celoti izveden, mora biti vmesnik v celoti izveden. No, najbolj opazna razlika med obema je, da ima abstraktni razred privzeto izvedbo, medtem ko je vmesnik le definicija metod, ki vsebuje samo članske deklaracije. Podrobneje razpravimo o teoretičnih vidikih obeh.

Kaj je abstraktni razred?

Abstraktni razred je posebna vrsta razreda, ki deluje kot osnova drugih razredov in je ni mogoče uveljaviti. Logiko izvajanja abstraktnega razreda zagotavljajo izpeljani razredi. Če želite razred narediti abstraktni, se uporabi "abstraktni" modifikator, kar pomeni, da je treba v razredu, ki izhaja iz njega, izvesti nekaj manjkajoče izvedbe. Vsebuje abstraktne in ne-abstraktne člane. Izvleček razreda je namenjen zagotavljanju osnovne funkcionalnosti, ki jo lahko nadalje delijo in prevladajo z več izpeljanimi razredi. Koristno je, da se izognete kakršnemu koli podvajanju kode. Zelo so videti kot vmesniki, vendar z dodano funkcionalnostjo.

Kaj je vmesnik?

Nasprotno pa vmesnik ni razred, ki vsebuje samo podpis funkcionalnosti. To je vzorec brez izvajanja. Konceptno gledano je samo opredelitev metod, ki vsebuje samo izjavo članov. To je prazna lupina, ki ne vsebuje izvajanja svojih članov. Je kot abstraktni osnovni razred, ki vsebuje samo abstraktne člane, kot so metode, dogodki, kazalci, lastnosti itd. Tega ni mogoče neposredno izvesti, njegove člane pa lahko izvaja kateri koli razred. Poleg tega lahko razred izvaja več vmesnikov, vendar lahko razred podeduje le en razred.

Abstraktni razred vmesnik: razlika med abstraktnim razredom in vmesnikom v C #

  1. Večkratna dednost - Razred lahko uporablja samo en abstraktni razred, zato več podedovanja ni podprto. Po drugi strani lahko vmesnik podpira večkratno dedovanje, kar pomeni, da lahko razred podeduje poljubno število dediščin.
  2. Opredelitev  od Izvleček razreda in vmesnika v C #- Abstraktni razred je posebna vrsta razreda, ki lahko vsebuje definicijo brez izvedbe. Logiko izvajanja zagotavljajo njeni izvedeni razredi. Lahko ima abstraktne in ne-abstraktne metode. Nasprotno je vmesnik le vzorec, ki ne more ničesar storiti. Tehnično je le prazna lupina.
  3. Izvajanje - Abstraktni razred lahko vsebuje tako definicijo kot njeno izvajanje. To je nepopoln razred, ki ga ni mogoče instancirati. Vmesnik ima lahko samo podpis funkcionalnosti brez kode.
  4.  Dostop do modifikatorjev - Abstraktni razred ima lahko več modifikatorjev dostopa, kot so pod, funkcije, lastnosti itd., Medtem ko vmesnik ne sme imeti modifikatorjev dostopa in vse metode morajo biti implicitno definirane kot javne.
  5. Homogenost - Abstraktni razred se uporablja za izvedbe istega tipa, vedenja in stanja, medtem ko se vmesnik uporablja za izvedbe, ki imajo le podpise metod.
  6. Izjava - Abstraktni razred deluje kot osnovni razred za vse druge razrede, tako da lahko razglasi ali uporabi katero koli spremenljivko, medtem ko vmesnik ne sme prijaviti nobenih spremenljivk.
  7. Izjava konstruktorja - Medtem ko lahko abstraktni razred vsebuje izjavo konstruktorja, vmesnik ne more imeti izjave konstruktorja.
  8. Jedro proti perifernemu - Abstraktni razred se uporablja za definiranje osnovne identitete razreda in se lahko uporablja za predmete iste vrste podatkov. Nasprotno pa se za določitev obrobnih sposobnosti razreda uporablja vmesnik.
  9. Rigid vs. Supple - Abstraktni razred je bolj funkcionalen, vsaj z vidika razvijalca, medtem ko je vmesnik bolj tog.

Izvleček razreda vmesnik: Tabela

Izvleček razreda

Vmesnik

Abstraktni razred ima lahko vse modifikatorje dostopa za izjavo članov o funkcijah, podmerah in lastnostih. Vmesnik ni dovoljen, da ima modifikatorje dostopa za izjavo članov o funkcijah, pod-lastnostih, lastnostih itd. Vsi člani se domnevajo kot implicitno javni.
Razred lahko kvečjemu uporablja samo en abstraktni razred. Razred lahko podeduje poljubno število vmesnikov.
Večkratno dedovanje v abstraktnem razredu ni podprto. Vmesnik lahko podpira večkratno dedovanje.
Tehnično gledano gre za razred, ki lahko vsebuje ali ne vsebuje definicije in njene izvedbe. Vmesnik ima lahko samo podpis funkcionalnosti, tako da je v bistvu prazna lupina.
Abstraktni razred lahko vsebuje člane. consts, opredeljene metode in škrbine. Vmesnik lahko vsebuje samo metode in consts.
Določa osnovno identiteto razreda in se uporablja za opis objektov iste vrste podatkov. Uporablja se za opisovanje obrobnih sposobnosti razreda.
Člani abstraktnega razreda ne morejo biti statični, razen če so popolni člani. Člani vmesnika ne morejo biti statični.
Idealen je za enake izvedbe in skupno vedenje. Vmesnike je bolje uporabiti, če več izvedb deli samo podpise metod.
Lahko ima izjavo konstruktorja. Ne more imeti izjave konstruktorja.
Abstraktni razred ima vnaprej določena polja in omejitve. Polja ni mogoče definirati v vmesnikih.
Lahko ima abstraktne in ne-abstraktne metode. Lahko ima samo abstraktne metode.

Povzetek

Kakšna je razlika med abstraktnim razredom in vmesnikom? To je verjetno eno najpogostejših vprašanj v katerem koli tehničnem razgovoru. Najverjetneje boste našli množico informacij o abstraktnih razredih in vmesnikih v katerem koli vadbi C #, vendar je razumevanje razlike med obema precej težaven del. Lahko združite vse informacije, ki jih najdete in jih še vedno ne morete dobiti dovolj. No, konceptualno sta oba najpomembnejša izraza v programiranju in sta povsem enaka, vendar se v funkcionalnosti veliko razlikujeta. Medtem ko je abstraktni razred posebna vrsta razreda, ki deluje kot osnova za druge razrede, je na drugi strani vmesnik le prazna lupina z samo izjavami članov.