Erinevused C # abstraktse vs liidese vahel

Abstraktne klass ja liides on mõlemad väga olulised metoodikad, mida õppida objektorienteeritud programmeerimiskoolituse mõistmiseks. Tavaliselt on mõlemad objektorienteeritud programmeerimises õppija alustamisel segadust tekitavad väga palju. Kui määratleme ühe abstraktse klassi, kuid ei rakenda midagi, siis näeb see absoluutselt välja nagu liides, ei saa keegi aru nendevahelistest erinevustest, mitte aga deklaratsioonist. Liidese ja abstraktse klassi vahel on aga palju erinevusi ja sarnasusi.

Abstraktne klass on lihtne klass, mida määratletakse abstraktse klassina ja mida ei saa realiseerida. Abstraktset klassi tuleb mõne alamklassi võrra laiendada, et kasutada selle konkreetse superklassi või abstraktse klassi kõiki funktsioone või kasulikkust. See aitab tegelikult säilitada superklasside või alaklasside õiget hierarhiat. Mitu alamklassi võib kasutada sama funktsiooni nime erinevate määratlustega. See tagab tegelikult, et rakendus peaks järgima mõnda konkreetset hierarhiat või standardeid, mis kannavad edasi rakenduse õiget seletatavat funktsionaalsust.

Liides pole absoluutselt klass, see on täpselt nagu üksus, mis on määratletud ühe kindla sõnaga liides. Liides ei määratlenud kunagi ühtegi definitsiooni, see sõltub täielikult konkreetsest deklaratsioonist, mida peaks pärima mitu klassi korraga. Mitu klassi saab määratleda ühe liidese individuaalse deklaratsiooni mitmekordse määratluse. Samuti omab see sama tüüpi rajatisi nagu abstraktne klass, peamiselt aitab see säilitada sama ja sama määratlusega alaklasside hierarhiat. Kuid peamine erinevus abstraktse klassi ja liidese vahel on laiendatud mitmest abstraktsest klassist, samas kui mitme liidese pärimine on võimalik. Kuna C # ei toeta mitut pärimist, pakub liides sama funktsionaalsust.

C # abstraktne vs liides (Infograafika) võrdlus ühest otsast teise

Allpool on toodud parimad võrdlused C # Abstract vs Interface vahel

Peamised erinevused C # abstraktse vs liidese vahel

Allpool selgitatakse mõningaid peamisi erinevusi C # Abstract vs Interface vahel

  1. Abstraktne klass ja liides kasutavad mõlemad tegelikult ühte või mitut alaklassi. Peamine piirang on üks alaklass, mis ei suuda laiendada mitu abstraktset klassi, see tähendab, et mitu pärimist ei ole võimalik, samas kui alaklass võib pärida mitu liidest korraga.
  2. Abstraktne mahutab keha definitsiooni või ainult meetodi määratlusega. Võimalik on alamklass, mis laiendab seda abstraktset klassi ja mida saab kasutada kehameetodi abil ning mis võib selgitada ka keha üksikasju abstraktse meetodi mis tahes konkreetse määratluse korral. Abstraktsel klassil peaks olema vähemalt üks abstraktne meetod (tähendab meetodi ainukest määratlust ilma kehata). Liidesel on ainult meetodi määratlus, see ei tohiks sisaldada määratletud meetodi põhilisi üksikasju. Üks alaklassi pärand, mis liidab ja kasutab neid, mis ei määratle meetodit, antud korrektsete kehadetailide abil dünaamiliselt mitme alaklassi jaoks.
  3. Abstraktsel klassil võivad olla erinevad juurdepääsu modifikaatorid, näiteks avalik, privaatne või kaitstud, nii et iga abstraktses klassis olev meetod või omadused võivad määratleda erinevad juurdepääsu modifikaatorid. Kui liidese jaoks ei saa anda juurdepääsu muutjaid, seega peaksid kõik liidese sees määratletud atribuudid või meetodid olema avaliku juurdepääsu muutjad, siis pole liideses võimalust määratleda teist juurdepääsu modifikaatorit.
  4. Üleklassi ja alaklassi kontseptsioon sobib täpselt abstraktse klassiga. Abstraktsele klassile saab anda alaklassi tuumaidentiteedi, tavaliselt hoiab see selle konkreetse alaklassi sarnast objekti. Liides määratleb tavaliselt klassi ühe perifeerse aktiivsuse konkreetse tüübi. Oletame, et meil on üks liidese nimi teisaldatav, nüüd saab seda liidest pärida nii auto kui ka inimese poolt. Arvestades, et autod ja inimesed on mõlemad täiesti erinevad klassiobjektid ega oma omavahelist seost.
  5. Kui rakendusel on erinevad rakendused, kuid selle konkreetse rakenduse tegevus on peaaegu sama, siis on parem kasutada abstraktklassi, kus saate selle konkreetse loogika määratleda ja kõik alaklassid pääsevad hõlpsalt juurde igale loogikale. Näitena andmebaasi ühenduvuse kohta, mida tavaliselt kasutavad kõik alamklassid, nii et kui seda ühenduvuse genereerimist ja sulgemiskoodi saab hoida abstraktses klassis, on igal alamklassil väga lihtne sellele juurde pääseda. Kui mitmed rakendused soovivad jagada ainult meetodi allkirja, siis on liides alati parem.

Võrdlustabel C # Abstraktne vs liides

Järgnevalt on toodud C # Abstract vs Interface võrdlustabel

ALUS

VÕRDLUS

Abstraktne klassLiides
Mitu pärimaÜks alaklass saab laiendada ainult ühte abstraktset klassi, mitte mitu.Üks alamklass suudab rakendada mitmeid liideseid, mis aitavad taastada, et C # mitut pärimisfunktsiooni ei toetata.
Klassi määratlusLiides ei määratle kunagi ühtegi konkreetset määratluse kogumit, see sisaldab lihtsalt definitsiooni, mis hiljem alaklassi poolt korralikult rakendatud.Abstraktne mahutab kogu keha koos määratlusega ja ka ainsa definitsiooni, näiteks liidese, mida võivad alamklassid tühistada. Igas abstraktses klassis peaks olema vähemalt üks abstraktne meetod, mis sisaldab ainult määratluse üksikasju. Keha kirjeldatakse hiljem alaklassis.
Juurdepääsu modifikaatorLiidese definitsioonis pole kunagi juurdepääsu modifikaatorit. Liides loeb tavaliselt kõik atribuudid avalikeks.Abstraktsel klassil võib selle määratluse jaoks olla juurdepääsu modifikaator. Nii et kõik kinnistud võivad olla avalikud, era- või kaitstud.
EtendusAlamklassi vastava meetodi leidmiseks kulub tavaliselt pisut rohkem aega.See on natuke kiirem kui liides.

Järeldus

Liidese- ja abstraktsusklassi kasutatakse peamiselt mitme rakenduse arukaks haldamiseks, nii et liigset koodi saab hõlpsalt vältida ja kõik on õiges hierarhias ja ülesehituses. Liides on alati parem sama allkirja jagamiseks mitmel juhul. Oletame, et Pantaloonsil on üks peaharu ja ka sellel on mitu haru erinevas asukohas. Nüüd saab üks konkreetne toode käivituda ühes kohas ühes lähenemisviisis, teises kohas aga teistsuguse lähenemisviisiga. Sel juhul peaks loogika erinema sama toote puhul ühes ja samas asukohas, seda tüüpi loogikat saab liidese kaudu paremini käsitleda. Nüüd võivad samal tootel olla mõned ühised omadused, mida tuleb toote turuletoomise ajal igas harudes esile tõsta. Sel juhul lisage koodide koondamise vältimiseks abstraktses klassis sama loogika ja seda saab kasutada mitmetes rakendustes erinevates harudes.

Soovitatav artikkel

See on olnud kasulik juhend erinevuste kohta C # Abstraktne ja liidesed vahel. Siin on arutletud pea võrdlemise üle, mis on oluline erinevus koos infograafikaga. Lisateabe saamiseks võite vaadata ka järgmist artiklit -

  1. C # liides vs abstraktne klass
  2. Java liides vs abstraktne klass
  3. Trükikirja liides vs klass
  4. TypeScripti tüüp vs liides
  5. Juurdepääs modifikaatoritele PHP-s
  6. Abstraktsed klassid JavaScriptis

Kategooria: