Rozdiel medzi abstraktnou triedou a rozhraním v C #

Abstraktná trieda vyzerá podobne ako rozhranie, ale koncept je pre začiatočníkov OOP trochu mätúci. Z koncepčného hľadiska abstraktná trieda vyzerá rovnako ako rozhranie, samozrejme, bez akejkoľvek implementácie, majú však spravodlivý podiel na rozdieloch. Hoci abstraktná trieda môže byť implementovaná čiastočne alebo úplne, rozhranie musí byť implementované úplne. Najvýznamnejším rozdielom medzi nimi je to, že abstraktná trieda môže mať predvolenú implementáciu, zatiaľ čo rozhranie je iba definícia metód, ktorá obsahuje iba deklarácie členov. Poďme sa podrobne venovať teoretickým aspektom oboch.

Čo je to abstraktná trieda?

Abstraktná trieda je špeciálny typ triedy, ktorý funguje ako základňa iných tried a nemôže byť konkretizovaný. Logiku implementácie abstraktnej triedy poskytujú jej odvodené triedy. Na vytvorenie abstraktu triedy sa používa „abstraktný“ modifikátor, čo znamená, že niektoré chýbajúce implementácie je potrebné implementovať do triedy, ktorá je z nej odvodená. Obsahuje abstraktné aj neregistrované členy. Abstraktná trieda je určená na poskytovanie základných funkcií, ktoré môžu ďalej zdieľať a prepísať viaceré odvodené triedy. Je užitočné vyhnúť sa akémukoľvek duplikovaniu kódu. Vyzerajú veľmi podobne ako rozhrania, ale s pridanou funkčnosťou.

Čo je rozhranie?

Rozhranie, na druhej strane, nie je trieda, ktorá obsahuje iba podpis funkčnosti. Je to vzor bez implementácie. Z koncepčného hľadiska je to iba definícia metód, ktorá obsahuje iba vyhlásenie členov. Je to prázdny shell, ktorý neobsahuje implementáciu svojich členov. Je to ako abstraktná základná trieda, ktorá obsahuje iba abstraktné členy, ako sú metódy, udalosti, ukazovatele, vlastnosti atď. Nemôže byť priamo vytvorená inštancia a jej členovia môžu byť implementovaní akoukoľvek triedou. Trieda môže implementovať aj viac rozhraní, ale trieda môže zdediť iba jednu triedu.

Abstraktná trieda verzus rozhranie: rozdiel medzi abstraktnou triedou a rozhraním v C #

  1. Viacnásobné dedičstvo - Trieda môže používať iba jednu abstraktnú triedu, preto nie je podporované viacnásobné dedičstvo. Rozhranie, na druhej strane, môže podporovať viacnásobné dedičstvo, čo znamená, že trieda môže zdediť ľubovoľný počet dedičstiev..
  2. definícia  z Abstraktná trieda a rozhranie v jazyku C #- Abstraktná trieda je špeciálny typ triedy, ktorý môže obsahovať definíciu bez implementácie. Logiku implementácie poskytujú jej odvodené triedy. Môže mať abstraktné aj ne abstraktné metódy. Rozhranie je na druhej strane iba vzorom, ktorý nemôže robiť nič. Technicky je to iba prázdny obal.
  3. uskutočnenie - Abstraktná trieda môže obsahovať definíciu aj jej implementáciu. Je to neúplná trieda, ktorú nemožno vytvoriť. Rozhranie môže mať podpis funkcie iba bez kódu.
  4.  Modifikátory prístupu - Abstraktná trieda môže mať niekoľko modifikátorov prístupu, ako sú sub, funkcie, vlastnosti atď., Zatiaľ čo rozhranie nemá povolené modifikátory prístupu a všetky metódy musia byť implicitne definované ako verejné.
  5. rovnorodosť - Abstraktná trieda sa používa na implementácie rovnakého typu, správania a stavu, zatiaľ čo rozhranie sa používa na implementácie, ktoré zdieľajú iba podpisy metód..
  6. vyhlásenie - Abstraktná trieda funguje ako základná trieda pre všetky ostatné triedy, takže môže deklarovať alebo použiť ľubovoľnú premennú, zatiaľ čo rozhranie nemôže deklarovať žiadne premenné..
  7. Vyhlásenie konštruktora - Aj keď abstraktná trieda môže mať vyhlásenie konštruktora, rozhranie nemôže mať vyhlásenie konštruktora.
  8. Jadro verzus periférne zariadenie - Abstraktná trieda sa používa na definovanie základnej identity triedy a môže sa použiť pre objekty rovnakého typu údajov. Na druhej strane sa rozhranie používa na definovanie periférnych schopností triedy.
  9. Tuhý vs. pružný - Abstraktná trieda je pružnejšia z hľadiska funkčnosti, aspoň z pohľadu vývojára, zatiaľ čo rozhranie je rigidnejšie.

Abstraktná trieda verzus rozhranie: tabuľka

Abstraktná trieda

Rozhranie

Abstraktná trieda môže mať všetky modifikátory prístupu pre deklaráciu funkcií, vedľajších hodnôt a vlastností členov. Rozhranie nemá povolené modifikátory prístupu na deklarovanie funkcií členov, podskupín, vlastností atď. Všetci členovia sa považujú za implicitne verejné.
Trieda môže nanajvýš používať iba jednu abstraktnú triedu. Trieda môže zdediť ľubovoľný počet rozhraní.
V abstraktnej triede nie je podporované viacnásobné dedičstvo. Rozhranie môže podporovať viacnásobné dedičstvo.
Technicky je to trieda, ktorá môže alebo nemusí obsahovať definíciu aj jej implementáciu. Rozhranie môže mať iba podpis funkčnosti, takže v podstate ide o prázdny shell.
Abstraktná trieda môže obsahovať členov. consts, definované metódy a metódy pahýly. Rozhranie môže obsahovať iba metódy a konštanty.
Definuje jadrovú identitu triedy a používa sa na opis objektov rovnakého typu údajov. Používa sa na opis periférnych schopností triedy.
Členovia abstraktnej triedy nemôžu byť statickí, pokiaľ nejde o úplného člena. Členovia rozhrania nemôžu byť statické.
Je ideálny pre implementácie rovnakého druhu a bežného správania. Je lepšie používať rozhrania, ak niekoľko implementácií zdieľa iba podpisy metód.
Môže mať vyhlásenie výrobcu. Nemôže mať vyhlásenie konštruktora.
Abstraktná trieda má preddefinované polia a konštanty. Polia nemôžu byť definované v rozhraniach.
Môže mať tak abstraktné, ako aj ne abstraktné metódy. Môže mať iba abstraktné metódy.

zhrnutie

Aký je rozdiel medzi abstraktnou triedou a rozhraním? Toto je pravdepodobne jedna z najbežnejších otázok položených pri každom technickom rozhovore. Pravdepodobne nájdete nepreberné množstvo informácií o abstraktných triedach a rozhraniach v každom výučbe C #, pochopenie rozdielu medzi nimi je však dosť ťažká časť. Môžete zjednotiť všetky informácie, ktoré nájdete, a stále ich nemôžete získať dosť. Koncepčne sú obidva najdôležitejšie pojmy v programovaní a sú úplne rovnaké, líšia sa však z hľadiska funkčnosti. Kým abstraktná trieda je špeciálnym typom triedy, ktorá funguje ako základňa pre iné triedy, rozhranie je na druhej strane iba prázdnou škrupinou s iba deklaráciami členov..