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.
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.
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.
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. |
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.