Az absztrakt osztály és az interfész közötti különbség a C # -ben

Az absztrakt osztály nagyjából úgy néz ki, mint egy interfész, de a koncepció kissé zavaró az OOP kezdõi számára. Fogalmi szempontból egy absztrakt osztály ugyanúgy néz ki, mint egy interfész, megvalósítás nélkül, bár megvan a maga részük a különbségekben. Míg egy absztrakt osztály részben vagy teljesen megvalósítható, az interfészt teljes mértékben végre kell hajtani. Nos, a legjelentősebb különbség a kettő között az, hogy egy absztrakt osztály alapértelmezett megvalósítással rendelkezik, míg az interfész csak a metódusok meghatározása, amely csak a tagok deklarációit tartalmazza. Nézzük meg részletesebben mindkettő elméleti aspektusait.

Mi az absztrakt osztály??

Az absztrakt osztály egy olyan speciális osztály, amely más osztályok alapjául szolgál, és nem váltható ki. Egy absztrakt osztály megvalósítási logikáját a származtatott osztályok biztosítják. Az osztály elvont előállításához az „elvont” módosítót alkalmazzuk, ami azt jelenti, hogy néhány hiányzó megvalósítást be kell építeni az abból származó osztályba. Mind absztrakt, mind nem absztrakt tagokat tartalmaz. Az absztrakt osztály célja az alapvető funkciók biztosítása, amelyeket tovább lehet megosztani és felülbírálni több származtatott osztály által. Hasznos elkerülni a kódok sokszorosítását. Nagyon hasonlítanak interfészekre, de hozzáadott funkcionalitással.

Mi az a felület??

Ugyanakkor az interfész nem olyan osztály, amely csak a funkcionalitás aláírását tartalmazza. Ez egy minta, végrehajtás nélkül. Fogalmi szempontból csak a módszerek meghatározása tartalmazza csak a tagok nyilatkozatát. Ez egy üres héj, amely nem tartalmazza a tagok végrehajtását. Olyan, mint egy absztrakt alaposztály, amely csak absztrakt tagokat tartalmaz, például módszereket, eseményeket, indexelőket, tulajdonságokat stb. Nem lehet azonnal megvalósítani, és tagjait bármely osztály végrehajthatja. Ezenkívül egy osztályon több interfész is megvalósítható, azonban az osztály csak egyetlen osztályt örökölhet.

Absztrakt osztály vs. interfész: az absztrakt osztály és az interfész közötti különbség C # -ben

  1. Több öröklés - Az osztály csak egy elvont osztályt használhat, így a többszörös öröklés nem támogatott. Másfelől egy interfész támogathatja a többszörös öröklést, azaz az osztály tetszőleges számú öröklést örökölhet.
  2. Meghatározás  nak,-nek Absztrakt osztály és interfész C # -ben- Az absztrakt osztály egy speciális osztálytípus, amely meghatározást tartalmazhat végrehajtás nélkül. A megvalósítási logikát a származtatott osztályok biztosítják. Ennek lehetnek absztrakt és nem absztrakt módszerei is. Az interfész viszont csak egy minta, amely semmit sem képes megtenni. Technikailag ez csak egy üres héj.
  3. Végrehajtás - Az absztrakt osztály tartalmazhatja mind a definíciót, mind annak megvalósítását. Ez egy hiányos osztály, amelyet nem lehet azonnal megvalósítani. Az interfésznek csak a funkcionalitás aláírása lehet, kód nélkül.
  4.  Hozzáférés-módosítók - Egy absztrakt osztálynak több hozzáférési módosítója is lehet, például alrendszerek, funkciók, tulajdonságok stb., Míg egy interfésznek nem szabad hozzáférési módosítói rendelkezni, és minden módszert közvetetten nyilvánosnak kell definiálni..
  5. A homogenitás - Egy absztrakt osztályt használnak azonos típusú, viselkedésbeli és státusú megvalósításokhoz, míg egy felületet olyan implementációkhoz, amelyek csak metódusaláírásokat osztanak meg..
  6. Nyilatkozat - Egy absztrakt osztály alaposztályként működik az összes többi osztálynál, így deklarálhat vagy felhasználhat bármilyen változót, miközben az interfész nem engedélyezi a változók deklarálását.
  7. Kivitelező nyilatkozata - Míg egy absztrakt osztálynak lehet konstruktor deklarációja, az interfésznek nem lehet konstruktor deklarációja.
  8. Core vs perifériás - Egy absztrakt osztályt használunk az osztály alapvető azonosságának meghatározására, és ugyanazon adattípus objektumokra használható. Másfelől egy interfész szolgál az osztály perifériás képességének meghatározására.
  9. Merev és kiegészítő - Az absztrakt osztály funkcionális szempontból rugalmasabb, legalább a fejlesztő szempontjából, míg az interfész merevebb.

Absztrakt osztály vs. felület: Táblázat

Absztrakt osztály

Felület

Egy absztrakt osztály minden hozzáférési módosítóval rendelkezhet a funkciók, alrendszerek és tulajdonságok tagok deklarálására. Az interfész nem férhet hozzá hozzáférési módosítókhoz a funkciók, alrendszerek, tulajdonságok stb. Tagok deklarálásához. Az összes tag implicit módon nyilvános..
Egy osztály legfeljebb egy elvont osztályt használhat. Az osztály tetszőleges számú interfészt örökölhet.
A többszörös öröklés nem támogatott az elvont osztályban. Egy interfész támogathatja a több öröklést.
Technikai szempontból ez egy osztály, amely tartalmazhat vagy nem, de tartalmazhatja mind a definíciót, mind annak megvalósítását. Az interfésznek csak a funkcionalitás aláírása lehet, tehát alapvetően egy üres héj.
Egy absztrakt osztály tagok lehet. tartalmak, meghatározott módszerek és módszercsonkok. Az interfész csak módszereket és tartalmakat tartalmazhat.
Meghatározza az osztály alapvető azonosságát, és ugyanazon adattípus objektumainak leírására szolgál. Egy osztály perifériás képességeinek leírására szolgál.
Egy absztrakt osztály tagjai nem lehetnek statikusak, ha teljes jogú tagok. Az interfész tagjai nem lehetnek statikusak.
Ideális ugyanolyan típusú és általános viselkedés megvalósításához. Sokkal jobb interfészeket használni, ha több megvalósítás megosztja a metódusaláírásokat.
Rendelkezhet kivitelezői nyilatkozattal. Nem lehet kivitelezői nyilatkozata.
Az absztrakt osztály előre definiált mezőkkel és konstansokkal rendelkezik. A mezők nem definiálhatók interfészekben.
Mind absztrakt, mind nem absztrakt módszerekkel rendelkezhet. Csak elvont módszerekkel járhat.

összefoglalás

Mi a különbség az absztrakt osztály és az interfész között? Ez valószínűleg az egyik leggyakoribb kérdés, amelyet bármely műszaki interjú során feltettek. Bármely C # oktatóanyagban valószínűleg rengeteg információ található az elvont osztályokról és interfészekről, azonban a kettő közötti különbség megértése elég nehéz. Összevonhatja az összes információt, amelyet megtalál, és még mindig nem kap eléggé. Nos, fogalmi szempontból mindkettő a legfontosabb kifejezés a programozásban, és meglehetősen azonos, azonban funkcionalitásukban nagyon különböznek egymástól. Míg az absztrakt osztály egy olyan speciális osztály, amely más osztályok alapjául szolgál, addig az interfész csupán egy üres héj, kizárólag tagnyilatkozatokkal.