Programovanie

Kedy použiť abstraktné rozhranie vs. rozhranie v C #

Pri navrhovaní aplikácií je dôležité vedieť, kedy použiť abstraktnú triedu a kedy rozhranie. Aj keď sa abstraktné triedy a rozhrania zdajú v niektorých ohľadoch podobné, existujú kľúčové rozdiely, ktoré určia, ktorá je najlepšou voľbou pre to, čo sa snažíte dosiahnuť. V tomto blogovom príspevku sa zmienim o týchto rozdieloch a o tom, ako sa rozhodnúť, kedy ktoré použiť.

Krátka odpoveď: Abstraktná trieda vám umožňuje vytvárať funkcie, ktoré môžu podtriedy implementovať alebo prepísať. Rozhranie umožňuje iba definovať funkčnosť, nie ju implementovať. A zatiaľ čo trieda môže rozšíriť iba jednu abstraktnú triedu, môže využívať výhody viacerých rozhraní.

C # abstraktná trieda vysvetlená

Abstraktná trieda je špeciálny typ triedy, ktorú nie je možné vytvoriť inštanciou. Abstraktná trieda je navrhnutá tak, aby bola zdedená podtriedami, ktoré buď implementujú alebo prepíšu svoje metódy. Inými slovami, abstraktné triedy sú implementované čiastočne alebo vôbec. Vo svojej abstraktnej triede môžete mať funkčnosť - metódy v abstraktnej triede môžu byť abstraktné aj konkrétne. Abstraktná trieda môže mať konštruktory - to je jeden zásadný rozdiel medzi abstraktnou triedou a rozhraním. Môžete využiť výhody abstraktných tried na návrh komponentov a zadanie určitej úrovne bežných funkcií, ktoré musia byť implementované odvodenými triedami.

Vysvetlenie rozhrania C #

Rozhranie je v podstate zmluva - nemá žiadnu implementáciu. Rozhranie môže obsahovať iba deklarácie metód; nemôže obsahovať definície metód. Rovnako nemôžete mať v rozhraní žiadne údaje o členoch. Zatiaľ čo abstraktná trieda môže obsahovať definície metód, polia a konštruktory, rozhranie môže obsahovať iba deklarácie udalostí, metód a vlastností. Metódy deklarované v rozhraní musia byť implementované triedami, ktoré implementujú rozhranie. Upozorňujeme, že trieda môže implementovať viac ako jedno rozhranie, ale môže rozšíriť iba jednu triedu. Trieda, ktorá implementuje rozhranie, by mala implementovať všetkých svojich členov. Rovnako ako abstraktná trieda, ani rozhranie nemožno vytvoriť inštanciu.

Mám použiť abstraktnú triedu alebo rozhranie?

Abstraktné triedy vám poskytujú flexibilitu, aby ste mohli mať určité konkrétne metódy a niektoré ďalšie metódy, ktoré by odvodené triedy mali implementovať. Naopak, ak používate rozhrania, budete musieť implementovať všetky metódy v triede, ktorá rozširuje rozhranie. Abstraktná trieda je dobrou voľbou, ak máte plány na budúcu expanziu - teda ak je pravdepodobné, že v hierarchii tried bude budúca expanzia. Ak chcete poskytnúť podporu pre budúce rozšírenie pri používaní rozhraní, musíte ho rozšíriť a vytvoriť nové.

Inou poznámkou je ľahké v prípade potreby pridať do hierarchie nové rozhranie. Ak však už vo svojej hierarchii máte abstraktnú triedu, nemôžete pridať ďalšiu, t. J. Abstraktnú triedu môžete pridať, iba ak žiadna nie je k dispozícii. Mali by ste použiť rozhranie, ak chcete zmluvu o nejakom správaní alebo funkčnosti. Rozhranie by ste nemali používať, ak potrebujete napísať rovnaký kód pre metódy rozhrania. V takom prípade by ste mali použiť abstraktnú triedu, definovať metódu raz a podľa potreby ju znova použiť. Používajte rozhrania na oddelenie kódu svojej aplikácie od jej konkrétnych implementácií alebo na obmedzenie prístupu členom určitého typu.

Dokumentácia k rozhraniam spoločnosti Microsoft uvádza:

Pomocou rozhraní môžete napríklad zahrnúť správanie z viacerých zdrojov do triedy. Táto funkcia je v jazyku C # dôležitá, pretože jazyk nepodporuje viacnásobné dedenie tried. Okrem toho musíte použiť rozhranie, ak chcete simulovať dedičnosť štruktúr, pretože v skutočnosti nemôžu dediť z inej štruktúry alebo triedy.

Implicitné a explicitné implementácie rozhrania

Rozhrania môžu byť implementované implicitne alebo explicitne. Vysvetlím, v čom sa tieto dve implementácie líšia. Zvážte rozhranie s názvom IBusinessLogic.

verejné rozhranie IBusinessLogic

{

void Initialize ();

}

Nasledujúca trieda bola pomenovaná BusinessLogic realizuje IBusinessLogic rozhranie.

verejná trieda BusinessLogic: IBusinessLogic

{

public void Initialize ()

   {

// Nejaký kód

   }

}

Môžete vytvoriť inštanciu súboru BusinessLogic triedy výslovne a potom zavolajte Inicializovať () metóda uvedená nižšie.

 IBusinessLogic businessLogic = nový BusinessLogic ();

businessLogic.Initialize ();

Nasledujúci úryvok kódu ilustruje, ako môžete implementovať IBusinessLogic rozhranie implicitne.

verejná trieda BusinessLogic: IBusinessLogic

{

void IBusinessLogic.Initialize ()

   {

   }

}

Teraz môžete vyvolať Inicializovať () rovnakým spôsobom s použitím odkazu na IBusinessLogic rozhranie. Rozdiel v týchto dvoch prístupoch spočíva v tom, že keď implementujete rozhranie výslovne vo svojej triede, ste nútení vyvolať metódu svojho rozhrania iba pomocou odkazu na dané rozhranie. Nasledujúci útržok kódu by preto nefungoval, t.j. by sa kompiloval.

 BusinessLogic businessLogic = nový BusinessLogic ();

businessLogic.Initialize ();

Ako urobiť viac v C #:

  • Kedy použiť abstraktné rozhranie vs. rozhranie v C #
  • Ako pracovať s AutoMapperom v C #
  • Ako používať výrazy lambda v C #
  • Ako pracovať s delegátmi Action, Func a Predicate v C #
  • Ako pracovať s delegátmi v C #
  • Ako implementovať jednoduchý záznamník v C #
  • Ako pracovať s atribútmi v C #
  • Ako pracovať s log4net v C #
  • Ako implementovať vzor návrhu úložiska v C #
  • Ako pracovať s odrazom v C #
  • Ako pracovať so súborovým systémom v C #
  • Ako vykonať lenivú inicializáciu v C #
  • Ako pracovať s MSMQ v C #
  • Ako pracovať s metódami rozšírenia v C #
  • Ako na nás výrazy lambda v C #
  • Kedy použiť volatile kľúčové slovo v C #
  • Ako používať kľúčové slovo výťažku v C #
  • Ako implementovať polymorfizmus v C #
  • Ako zostaviť vlastný plánovač úloh v C #
  • Ako pracovať s RabbitMQ v C #
  • Ako pracovať s n-ticí v C #
  • Skúmanie virtuálnych a abstraktných metód v C #
$config[zx-auto] not found$config[zx-overlay] not found