Különbség a C # absztrakt osztály és interfész között A különbség

Anonim

Az absztrakt osztály nagyon hasonlít egy felületre, de a koncepció kissé zavaró az OOP kezdőknek. Fogalmi szempontból az absztrakt osztály természetesen úgy néz ki, mint egy interfész, természetesen végrehajtás nélkül, azonban a különbségek méltányos aránya van. Bár egy elvont osztály részben vagy teljesen megvalósítható, a felületet teljesen végre kell hajtani. Nos, a két legfontosabb különbség az, hogy egy absztrakt osztály lehet az alapértelmezett megvalósítás, míg egy interfész csak a módszerek meghatározása, amely csak a tag deklarációkat tartalmazza. Beszéljünk mindkét részlet elméleti vonatkozásairól.

Mi az absztrakt osztály?

Az absztrakt osztály egy speciális típusú osztály, amely más osztályok alapjaként működik, és nem lehet instantiáltatni. Az absztrakt osztály végrehajtási logikáját származtatott osztályai biztosítják. Az osztály elvontsága érdekében az "absztrakt" módosítót használják, ami azt jelenti, hogy valamilyen hiányzó végrehajtást kell végrehajtani a benne levő osztályban. Absztrakt és nem absztrakt tagokat is tartalmaz. Az absztrakt osztály célja, hogy olyan alapfunkcionalitást biztosítson, amely tovább osztható és felülbírálható több származtatott osztályból. Hasznos elkerülni a kódok megkétszerezését. Nagyon hasonlítanak az interfészekhez, de hozzáadott funkcionalitással.

Mi az illesztő?

Egy interfész viszont nem olyan osztály, amely csak a funkcionalitás aláírását tartalmazza. Ez egy minta, amelynek nincs végrehajtása. Koncepcionális értelemben ez csak a módszerek meghatározása, amely csak a tagok nyilatkozatát tartalmazza. Ez egy üres héj, amely nem tartalmazza a tagok végrehajtását. Ez olyan, mint egy absztrakt alaposztály, amely csak absztrakt tagokat tartalmaz, mint például a módszerek, események, indexerek, tulajdonságok stb. Nem lehet közvetlenül instantiáltatni, és tagjai bármely osztályon végrehajthatók. Ezenkívül több interfész is megvalósítható egy osztályon keresztül, azonban egy osztály csak egyetlen osztályt örökölhet.

Absztrakt osztály és interfész: különbség az absztrakt osztály és az interfész között a C #

  1. Többszörös öröklés - Egy osztály csak egy elvont osztályt használhat, ezért több öröklést nem támogat. Egy felület viszont támogathatja a többszörös öröklést, ami azt jelenti, hogy egy osztály minden öröklést örökölhet.
  2. Definíció a Absztrakt osztály és interfész a C # - Az absztrakt osztály egy speciális típusú osztály, amely tartalmazhat definíció nélküli végrehajtás. A megvalósítási logikát a származtatott osztályok biztosítják. Ez absztrakt és nem absztrakt módszerekkel is rendelkezhet.Egy interfész viszont csak olyan mintázat, amely semmit sem tehet. Technikailag ez csak egy üres héj.
  3. Végrehajtás - Az elvont osztály tartalmazhat mind definíciót, mind annak végrehajtását. Ez egy hiányos osztály, amelyet nem lehet instantiáltatni. Egy interfész csak a funkciók aláírásával rendelkezik kód nélkül.
  4. Hozzáférés-módosítók - Az absztrakt osztály többféle hozzáférési módosítót (subs, függvényeket, tulajdonságokat stb.) Is tartalmazhat, míg a felület nem férhet hozzá módosítóhoz, és az összes módszert implicit módon nyilvánosnak kell tekinteni.
  5. Homogeneity - Egy elvont osztályt alkalmaznak az azonos típusú, viselkedési és állapotú implementációkhoz, míg egy interfész olyan implementációkhoz használatos, amelyek csak metód aláírásokat használnak.
  6. Nyilatkozat - Az elvont osztály az összes többi osztályhoz tartozó alaposztályként működik, így bármilyen változót deklarálhat vagy használhat, miközben a felület nem adhat ki változókat.
  7. Konstruktor Nyilatkozat - Bár egy elvont osztályban lehet konstruktor deklaráció, a felületen nem lehet konstruktor deklaráció.
  8. Core vs. Peripheral - Egy elvont osztályt használnak egy osztály alapvető azonosságának meghatározására, és ugyanazon adattípusú objektumokhoz használhatók. Egy interfész viszont egy osztály perifériális képességének meghatározására szolgál.
  9. Merev vs. Supple - Az absztrakt osztály rugalmasabb a funkcionalitás szempontjából, legalábbis a fejlesztői szempontból, míg a felület merevebb.

Absztrakt osztály és interfész: táblázatformátum

Absztrakt osztály

Interfész

Egy absztrakt osztályba beletartozhat minden hozzáférésmódosító a tagok deklarációjához, függvényekhez és tulajdonságokhoz. Egy interfésznek nem szabad hozzáférési módosítója a tagok deklarálásához függvények, függvények, tulajdonságok stb. Minden tagot implicit módon nyilvánosnak kell tekinteni.
Egy osztály legfeljebb csak egy absztrakt osztályt használhat. Az osztály bármely számú interfészt örökölhet.
A többszörös öröklést absztrakt osztály nem támogatja. Egy interfész támogathatja a több öröklést.
Műszakilag ez egy olyan osztály, amely vagy tartalmazhat vagy nem tartalmazhat mind definíciót, mind végrehajtását. Egy interfésznek csak a funkcionalitás aláírása lehet, tehát alapvetően üres héj.
Az absztrakt osztály tartalmazhat tagokat. konstansok, meghatározott módszerek és metódusok. Az interfész csak metódust és konstansokat tartalmazhat.
Ez határozza meg az osztály alapvető azonosságát, és azonos típusú adattípusok leírására szolgál. Egy osztály perifériális képességeinek leírására szolgál.
Az elvont osztály tagjai nem lehetnek statikusak, hacsak nem teljes tag. Az interfész tagjai nem lehetnek statikusak.
Ideális az azonos típusú és közös viselkedés megvalósításához. Ha több implementáció csak metódus-aláírással rendelkezik, akkor jobb, ha interfészeket használunk.
Építõi nyilatkozatot tehet. Nem lehet konstruktor deklaráció.
Az absztrakt osztály előre definiált mezők és pontozók. A mezők nem definiálhatók az interfészekben.
Mind absztrakt, mind nem absztrakt módszerek lehetnek. Ez csak absztrakt módszerekkel lehetséges.

Összefoglaló

Mi a különbség az absztrakt osztály és az interfész között? Ez talán az egyik leggyakoribb kérdés bármely technikai interjúban. Valószínűleg sokféle információt találsz az absztrakt osztályokról és interfészekről bármely C # bemutatóban, de a kettő közötti különbség megértése elég kemény. Összeszerelheti az összes információt, amit még talál, és még mindig nem elég. Nos, koncepcionálisan mindkettő a program legfontosabb feltételei, és meglehetősen ugyanazok, azonban a funkcionalitás szempontjából sokat különböznek egymástól. Míg egy absztrakt osztály egy olyan speciális típusú osztály, amely más osztályok alapjaként működik, egy interfész viszont csak egy üres héj, amely csak tagnyilatkozatokat tartalmaz.