Atšķirība starp abstraktu klasi un interfeisu C #

Abstrakta klase izskatās daudz kā interfeiss, bet OOP iesācējiem šī koncepcija ir nedaudz mulsinoša. Konceptuāli abstrakta klase izskatās gluži kā saskarne, protams, bez jebkādas ieviešanas, lai arī viņiem ir diezgan liela atšķirību daļa. Kaut arī abstraktu klasi var daļēji vai pilnībā ieviest, interfeiss ir jāievieš pilnībā. Visbūtiskākā atšķirība starp abām ir tāda, ka abstraktajai klasei var būt noklusējuma ieviešana, savukārt saskarne ir tikai metožu definīcija, kurā ir tikai dalībnieku deklarācijas. Detalizēti apspriedīsim abu teorētiskos aspektus.

Kas ir abstraktā klase?

Abstrakta klase ir īpašs klases tips, kas darbojas kā citu klašu pamats un kuru nevar uzreiz realizēt. Abstraktas klases ieviešanas loģiku nodrošina tās atvasinātās klases. Lai klasi padarītu abstraktu, tiek izmantots “abstrakts” modifikators, kas nozīmē, ka no tā atvasinātajā klasē ir jāievieš daži trūkstoši ieviešanas varianti. Tajā ir gan abstrakti, gan neabstrakti biedri. Abstraktā klase ir paredzēta, lai nodrošinātu pamata funkcionalitāti, kuru var tālāk dalīt un pārņemt vairākās atvasinātās klasēs. Ir lietderīgi izvairīties no jebkāda veida kodu kopēšanas. Tie izskatās ļoti līdzīgi interfeisiem, bet ar papildu funkcionalitāti.

Kas ir interfeiss?

Turpretī saskarne nav klase, kurā ir tikai funkcionalitātes paraksts. Tas ir modelis bez ieviešanas. Konceptuālā nozīmē, ka tikai metožu definīcija satur tikai dalībnieku deklarācijas. Tā ir tukša čaula, kurā nav dalībnieku ieviešanas. Tas ir kā abstrakta bāzes klase, kurā ir tikai tādi abstrakti dalībnieki kā metodes, notikumi, indeksatori, rekvizīti utt. To nevar tieši momentēt, un tās dalībniekus var ieviest jebkura klase. Turklāt klase var ieviest vairākas saskarnes, tomēr klase var mantot tikai vienu klasi.

Abstract klase un interfeiss: atšķirība starp abstraktu klasi un interfeisu C #

  1. Vairāki mantojumi - Klase var izmantot tikai vienu abstraktu klasi, tāpēc vairākkārtēja mantošana netiek atbalstīta. Turpretī saskarne var atbalstīt vairāku mantojumu, kas nozīmē, ka klase var mantot jebkuru mantojumu skaitu.
  2. Definīcija  no C klases abstraktā klase un saskarne- Abstrakta klase ir īpašs klases veids, kurā var būt definīcija bez ieviešanas. Īstenošanas loģiku nodrošina atvasinātās klases. Tam var būt gan abstraktas, gan abstraktas metodes. Turpretī saskarne ir tikai paraugs, kas neko nevar izdarīt. Tehniski tas ir tikai tukšs apvalks.
  3. Īstenošana - Abstraktā klasē var būt gan definīcija, gan tās ieviešana. Tā ir nepilnīga klase, kuru nevar uzreiz realizēt. Interfeisam var būt tikai funkcionalitātes paraksts bez koda.
  4.  Piekļuves modifikatori - Abstraktajai klasei var būt vairāki piekļuves pārveidotāji, piemēram, apakšsistēmas, funkcijas, rekvizīti utt., Savukārt interfeisam nav atļauts piekļūt modifikatoriem, un visām metodēm jābūt netieši definētām kā publiskai..
  5. Viendabīgums - Tāda paša veida, uzvedības un statusa ieviešanai tiek izmantota abstrakta klase, savukārt interfeisam tiek izmantota ieviešana, kurai ir tikai metodes paraksti..
  6. Deklarācija - Abstrakta klase darbojas kā bāzes klase visām pārējām klasēm, lai tā varētu deklarēt vai izmantot jebkuru mainīgo, kamēr saskarnei nav atļauts deklarēt jebkurus mainīgos..
  7. Konstruktora deklarācija - Kaut arī abstraktajai klasei var būt konstruktora deklarācija, interfeisam nevar būt konstruktora deklarācija.
  8. Core vs perifērijas - Klases pamata identitātes noteikšanai izmanto abstraktu klasi, un to var izmantot viena un tā paša datu tipa objektiem. No otras puses, interfeiss tiek izmantots, lai noteiktu klases perifērās spējas.
  9. Stīvs pret papildinājumu - Abstrakta klase ir elastīgāka funkcionalitātes ziņā, vismaz no izstrādātāja viedokļa, savukārt saskarne ir stingrāka.

Abstraktā klase un interfeiss: tabulas forma

Abstraktā klase

Saskarne

Abstraktajai klasei var būt visi piekļuves pārveidotāji, lai locekļi deklarētu funkcijas, apakšsistēmas un rekvizītus. Saskarnei nav atļauts piekļuves pārveidotājs dalībnieku, funkciju, apakšdaļu, rekvizītu utt. Deklarēšanai. Visi dalībnieki tiek uzskatīti par netieši publiskiem..
Klase var izmantot tikai vienu abstraktu klasi. Klase var mantot neierobežotu skaitu interfeisu.
Vairāku mantojumu abstraktā klasē neatbalsta. Saskarne var atbalstīt vairākus mantojumus.
Tehniski tā ir klase, kurā var būt vai nevar būt gan definīcija, gan tās ieviešana. Interfeisam var būt tikai funkcionalitātes paraksts, tāpēc tas būtībā ir tukšs apvalks.
Abstraktā klasē var būt dalībnieki. Consts, definētās metodes un metožu daļas. Interfeiss var saturēt tikai metodes un līgumus.
Tas definē klases galveno identitāti un tiek izmantots, lai aprakstītu viena un tā paša datu tipa objektus. To izmanto, lai aprakstītu klases perifērijas spējas.
Abstraktas klases dalībnieki nevar būt statiski, ja vien tie nav pilntiesīgi locekļi. Saskarnes dalībnieki nevar būt statiski.
Tas ir ideāli piemērots tāda paša veida un parastas uzvedības ieviešanai. Labāk ir izmantot saskarnes, ja vairākās implementācijās ir kopīgi tikai metodes paraksti.
Tam var būt konstruktora deklarācija. Tai nevar būt konstruktora deklarācija.
Abstraktajai klasei ir iepriekš definēti lauki un konstantes. Laukus nevar definēt saskarnēs.
Tam var būt gan abstraktas, gan neabstraktas metodes. Tam var būt tikai abstraktas metodes.

Kopsavilkums

Kāda ir atšķirība starp abstraktu klasi un interfeisu? Tas, iespējams, ir viens no visbiežāk uzdotajiem jautājumiem jebkurā tehniskajā intervijā. Jūs, visticamāk, atradīsit pārpilnību informāciju par abstraktajām klasēm un saskarnēm jebkurā C # apmācībā, tomēr izpratne par atšķirību starp abām ir diezgan sarežģīta. Jūs varat konsolidēt visu informāciju, kuru varat atrast, un joprojām nevarat to iegūt pietiekami daudz. Nu, konceptuāli abi ir vissvarīgākie termini programmēšanā un ir diezgan vienādi, tomēr funkcionalitātes ziņā tie ļoti atšķiras. Kaut arī abstraktā klase ir īpašs klases tips, kas darbojas kā pamats citām klasēm, interfeiss, no otras puses, ir tikai tukša čaula ar tikai dalībnieku deklarācijām.