Erinevus abstraktse klassi ja liidese vahel C # -s

Abstraktne klass näeb palju välja nagu liides, kuid kontseptsioon on OOP-i alustajatele pisut segane. Kontseptuaalselt näeb abstraktne klass välja just nagu liides, muidugi, ilma igasuguse teostuseta, kuid neil on erinevuste osas õiglane osa. Kuigi abstraktset klassi saab kas osaliselt või täielikult rakendada, tuleb liides täielikult rakendada. Noh, kõige märkimisväärsem erinevus nende kahe vahel on see, et abstraktsel klassil võib olla vaikimisi juurutamine, samas kui liides on lihtsalt meetodite määratlus, mis sisaldab ainult liikmedeklaratsioone. Arutleme üksikasjalikult mõlema teoreetilise külje üle.

Mis on abstraktne klass?

Abstraktne klass on eritüüpi klass, mis toimib teiste klasside alusena ja mida ei saa realiseerida. Abstraktse klassi rakendusloogika tagavad selle tuletatud klassid. Klassi abstraktseks muutmiseks kasutatakse „abstraktset” modifikaatorit, mis tähendab, et sellest tuletatud klassis tuleb rakendada mõni puuduv teostus. See sisaldab nii abstraktseid kui ka mitteabstraktseid liikmeid. Abstraktne klass on ette nähtud põhifunktsioonide pakkumiseks, mida saab mitmest tuletatud klassist edasi jagada ja üle vaadata. Kasulik on vältida igasugust koodi dubleerimist. Need näevad väga sarnased liidestega, kuid lisatud funktsionaalsusega.

Mis on liides?

Liides seevastu ei ole klass, mis sisaldab ainult funktsionaalsuse allkirja. See on muster, millel puudub rakendamine. Kontseptuaalselt on ainult meetodite määratlus, mis sisaldab ainult liikmete deklaratsiooni. See on tühi kest, mis ei sisalda liikmete rakendamist. See on nagu abstraktne põhiklass, mis sisaldab ainult abstraktseid liikmeid, näiteks meetodeid, sündmusi, indekseerijaid, atribuute jne. Seda ei saa vahetult teostada ja selle liikmeid saab rakendada iga klass. Lisaks saab klass rakendada mitmeid liideseid, kuid klass saab pärida ainult ühe klassi.

Abstraktne klass vs liides: erinevus abstraktse klassi ja liidese vahel C # -is.

  1. Mitu pärandit - Klass saab kasutada ainult ühte abstraktset klassi, seetõttu ei toetata mitut pärimist. Teisest küljest võib liides toetada mitut pärimist, mis tähendab, et klass võib pärida suvalist arvu pärandusi.
  2. Definitsioon  kohta C-klassi abstraktne klass ja liides- Abstraktne klass on eritüüpi klass, mis võib sisaldada definitsiooni ilma rakenduseta. Rakendusloogika tagavad tuletatud klassid. Sellel võivad olla nii abstraktsed kui ka mitteabstraktsed meetodid. Liides seevastu on lihtsalt muster, millega ei saa midagi teha. Tehniliselt on see lihtsalt tühi kest.
  3. Rakendamine - Abstraktne klass võib sisaldada nii määratlust kui ka selle rakendamist. See on ebatäielik klass, mida ei saa kohe realiseerida. Liidesel saab funktsionaalsuse allkiri olla ainult ilma koodita.
  4.  Juurdepääsumuundurid - Abstraktsel klassil võib olla mitu juurdepääsu modifikaatorit, näiteks alamfunktsioonid, funktsioonid, atribuudid jne, samal ajal kui liidesel pole juurdepääsu modifitseerijaid ja kõik meetodid peavad olema kaudselt määratletud kui avalikud.
  5. Homogeensus - Sama tüüpi, käitumise ja olekuga rakenduste jaoks kasutatakse abstraktset klassi, liidesed aga ainult meetodi allkirju jagavate rakenduste jaoks..
  6. Deklaratsioon - Abstraktne klass toimib kõigi teiste klasside põhiklassina, nii et see saab deklareerida või kasutada kõiki muutujaid, samal ajal kui liidesel pole lubatud muutujaid deklareerida.
  7. Ehitaja deklaratsioon - Kuigi abstraktsel klassil võib olla konstruktori deklaratsioon, ei saa liidesel olla konstruktori deklaratsiooni.
  8. Tuum vs perifeerne - Klassi tuumaidentiteedi määratlemiseks kasutatakse abstraktset klassi ja seda saab kasutada sama andmetüübi objektide jaoks. Klassi perifeerse võime määratlemiseks kasutatakse teisest küljest liidest.
  9. Jäik vs täiendus - Abstraktne klass on funktsionaalsuse osas paindlikum, vähemalt arendaja vaatevinklist, samas kui liides on jäigem.

Abstraktne klass vs liides: tabeli vorm

Abstraktne klass

Liides

Abstraktsel klassil võivad olla kõik juurdepääsu modifikaatorid funktsioonide, alamomaduste ja omaduste deklareerimiseks liikmele. Liidesel pole lubatud juurdepääsu modifikaatoreid funktsioonide, alamomaduste, omaduste jms deklareerimiseks liikmetele. Kõik liikmed on kaudselt avalikud.
Klass võib kasutada ainult ühte abstraktset klassi. Klass võib pärida suvalist arvu liideseid.
Mitu pärimist abstraktses klassis ei toetata. Liides võib toetada mitut pärimist.
Tehniliselt on see klass, mis võib sisaldada määratlust ja selle rakendamist või mitte. Liidesel võib olla ainult funktsionaalsuse allkiri, nii et see on põhimõtteliselt tühi kest.
Abstraktne klass võib sisaldada liikmeid. Consts, määratletud meetodid ja metoodikad. Liides võib sisaldada ainult meetodeid ja konspekte.
See määratleb klassi tuumaidentiteedi ja seda kasutatakse sama andmetüübi objektide kirjeldamiseks. Seda kasutatakse klassi perifeersete võimete kirjeldamiseks.
Abstraktse klassi liikmed ei saa olla staatilised, kui nad pole täisliikmed. Liidese liikmed ei saa olla staatilised.
See on ideaalne sama tüüpi ja tavapärase käitumisega rakenduste jaoks. Parem on kasutada liideseid, kui mitu rakendust jagavad ainult meetodi allkirju.
Sellel võib olla ehitaja deklaratsioon. Sellel ei saa olla ehitaja deklaratsiooni.
Abstraktsel klassil on eelnevalt määratletud väljad ja konstandid. Välju ei saa liidestes määratleda.
Sellel võivad olla nii abstraktsed kui ka mitteabstraktsed meetodid. Sellel võib olla ainult abstraktseid meetodeid.

Kokkuvõte

Mis vahe on abstraktsel klassil ja liidesel? See on tõenäoliselt üks levinumaid küsimusi, mida igal tehnilisel intervjuul küsitakse. Tõenäoliselt leiate suvalisest C # õpetusest hulgaliselt teavet abstraktsete klasside ja liideste kohta, kuid nende kahe erinevuse mõistmine on üsna raske osa. Saate koondada kogu teabe, mida leiate, ja ikkagi ei saa te seda piisavalt. Noh, kontseptuaalselt on mõlemad programmeerimisel kõige olulisemad mõisted ja on üsna samad, kuid funktsionaalsuse osas on nad väga erinevad. Kui abstraktne klass on eritüüpi klass, mis toimib teiste klasside alusena, siis liides on teiselt poolt lihtsalt tühi kest ainult liikmete deklaratsioonidega.