Skirtumas tarp abstrakčios klasės ir sąsajos C #

Abstrakti klasė atrodo daugmaž kaip sąsaja, tačiau sąvoka šiek tiek painioja pradedančiuosius OOP. Konceptualiai abstrakti klasė atrodo kaip sąsaja, žinoma, be jokio diegimo, tačiau jos turi gana didelę skirtumų dalį. Nors abstrakčią klasę galima įgyvendinti iš dalies arba visiškai, sąsaja turi būti visiškai įgyvendinta. Labiausiai pastebimas skirtumas tarp šių dviejų yra tas, kad abstrakti klasė gali būti įdiegta pagal nutylėjimą, o sąsaja yra tik metodų apibrėžimas, kuriame yra tik narių deklaracijos. Aptarkime abiejų teorinius aspektus.

Kas yra abstrakčioji klasė?

Abstraktioji klasė yra ypatinga klasės rūšis, kuri veikia kaip kitų klasių pagrindas ir negali būti įgyvendinta. Abstrakčios klasės diegimo logiką teikia išvestinės klasės. Kad klasė taptų abstrakčia, naudojamas „abstrakčiojo“ modifikatorius, o tai reiškia, kad iš jo gautoje klasėje reikia įdiegti kai kuriuos trūkstamus įgyvendinimus. Jame yra ir abstrakčių, ir neabstraktų narių. Abstrakčioji klasė yra skirta suteikti pagrindines funkcijas, kuriomis gali būti toliau dalijamasi ir kurias galima pakeisti keliomis išvestinėmis klasėmis. Naudinga vengti bet kokio kodo dubliavimo. Jie labai panašūs į sąsajas, tačiau turi papildomų funkcijų.

Kas yra sąsaja?

Kita vertus, sąsaja nėra klasė, kurioje yra tik parašas apie funkcionalumą. Tai modelis be įgyvendinimo. Konceptualiai kalbant, tik metodų apibrėžimas apima tik narių deklaraciją. Tai tuščias apvalkalas, kuriame nėra narių įgyvendinimo. Tai tarsi abstrakti pagrindinė klasė, kurioje yra tik abstraktūs nariai, tokie kaip metodai, įvykiai, rodyklės, savybės ir pan. Jos negalima tiesiogiai realizuoti, o jos narius gali įgyvendinti bet kuri klasė. Be to, klasė gali įgyvendinti kelias sąsajas, tačiau klasė gali paveldėti tik vieną klasę.

Abstrakčių klasių ir sąsajų skirtumas: abstrakčios klasės ir sąsajos C #

  1. Daugybinis paveldėjimas - Klasė gali naudoti tik vieną abstrakčią klasę, todėl daugialypis paveldėjimas nepalaikomas. Kita vertus, sąsaja gali palaikyti daugybinį palikimą, tai reiškia, kad klasė gali paveldėti bet kokį palikimų skaičių.
  2. Apibrėžimas  apie C klasės abstrakti klasė ir sąsaja- Abstraktioji klasė yra speciali klasės rūšis, kurioje gali būti apibrėžimas be įgyvendinimo. Įdiegimo logiką teikia išvestinės klasės. Tai gali turėti ir abstrakčius, ir abstrakčius metodus. Kita vertus, sąsaja yra tik šablonas, kuris nieko negali padaryti. Techniškai tai tik tuščias apvalkalas.
  3. Įgyvendinimas - Abstrakčioje klasėje gali būti apibrėžimas ir jos įgyvendinimas. Tai neužbaigta klasė, kurios negalima akimirksniu įgyvendinti. Sąsaja gali turėti tik funkcionalumo parašą be jokio kodo.
  4.  Prieigos modifikatoriai - Abstrakti klasė gali turėti keletą prieigos modifikatorių, tokių kaip subs, funkcijos, savybės ir kt., Tuo tarpu sąsajoje neleidžiama turėti prieigos modifikatorių, o visi metodai turi būti netiesiogiai apibrėžti kaip vieši..
  5. Homogeniškumas - Abstraktioji klasė naudojama to paties tipo, elgesio ir būsenos įgyvendinimams, o sąsaja naudojama įgyvendinimams, kurie dalijasi tik metodo parašais..
  6. Deklaracija - Abstrakti klasė veikia kaip pagrindinė klasė visoms kitoms klasėms, todėl ji gali deklaruoti ar naudoti bet kurį kintamąjį, o sąsaja neleidžia deklaruoti jokių kintamųjų..
  7. Konstruktoriaus deklaracija - Nors abstrakti klasė gali turėti konstruktoriaus deklaraciją, sąsaja negali turėti konstruktoriaus deklaracijos.
  8. Šerdis ir periferija - Abstrakti klasė naudojama apibrėžti pagrindinę klasės tapatybę ir gali būti naudojama to paties tipo duomenų objektams. Kita vertus, sąsaja naudojama apibrėžti klasės periferinius sugebėjimus.
  9. Nelanksti ir nepatenkinama - Abstrakti klasė yra labiau lanksti pagal funkcionalumą, bent jau nuo kūrėjo perspektyvos, tuo tarpu sąsaja yra griežtesnė.

Anotacija klasė ir sąsaja: lentelės forma

Anotacija

Sąsaja

Abstrakčioji klasė gali turėti visus prieigos modifikatorius, kad galėtų deklaruoti funkcijas, poskyrius ir savybes. Neleidžiama turėti sąsajos prieigos modifikatorių nariams deklaruoti funkcijas, poskyrius, savybes ir pan. Visi nariai laikomi netiesiogiai viešais..
Klasė gali naudoti tik vieną abstrakčią klasę. Klasė gali paveldėti bet kokį sąsajų skaičių.
Keli paveldėjimai abstrakčioje klasėje nepalaikomi. Sąsaja gali palaikyti kelis paveldėjimus.
Techniškai tai yra klasė, kurioje gali nebūti apibrėžimo ir jo įgyvendinimo. Sąsaja gali turėti tik funkcionalumo parašą, taigi iš esmės tai yra tuščias apvalkalas.
Abstrakčioje klasėje gali būti narių. konspektai, apibrėžti metodai ir metodo fragmentai. Sąsajoje gali būti tik metodai ir konspektai.
Tai apibrėžia pagrindinę klasės tapatybę ir yra naudojamas aprašyti to paties tipo duomenų objektus. Jis naudojamas apibūdinti periferinius klasės sugebėjimus.
Abstrakčios klasės nariai negali būti statiški, nebent jie būtų tikri nariai. Sąsajos nariai negali būti statiniai.
Tai idealiai tinka įgyvendinti tokio paties pobūdžio ir įprastą elgesį. Geriau naudoti sąsajas, jei keli įgyvendinimai dalijasi tik metodo parašais.
Jis gali turėti konstruktoriaus deklaraciją. Ji negali turėti konstruktoriaus deklaracijos.
Abstrakčioji klasė turi iš anksto apibrėžtus laukus ir konstantas. Laukų negalima apibrėžti sąsajose.
Tai gali turėti tiek abstrakčius, tiek abstrakčius metodus. Tai gali turėti tik abstrakčius metodus.

Santrauka

Kuo skiriasi abstrakti klasė ir sąsaja? Tai turbūt vienas iš dažniausiai užduodamų klausimų per bet kurį techninį interviu. Tikėtina, kad bet kuriame C # vadove rasite gausybę informacijos apie abstrakčias klases ir sąsajas, tačiau suprasti skirtumą tarp šių dviejų dalykų yra gana sunku. Galite konsoliduoti visą informaciją, kurią galite rasti, tačiau vis dar negalite jos gauti. Na, konceptualiai abu yra patys svarbiausi programavimo terminai ir yra gana vienodi, tačiau jie labai skiriasi funkcionalumu. Nors abstrakti klasė yra ypatinga klasės rūšis, kuri veikia kaip pagrindas kitoms klasėms, sąsaja, kita vertus, yra tik tuščias apvalkalas su tik narių deklaracijomis..